ggplot2将数据标签添加到分组的直方图中

问题描述 投票:0回答:1

我有一个名为“ year”的表,如下所示:

#   Year    Stars   n   pct

1   2015    1   778 26.5
2   2015    2   247 8.4
3   2015    3   286 9.7
4   2015    4   439 15
5   2015    5   1186    40.4
6   2016    1   678 22.7
7   2016    2   233 7.8
8   2016    3   256 8.6
9   2016    4   451 15.1
10  2016    5   1372    45.9
11  2017    1   501 24.3
12  2017    2   180 8.7
13  2017    3   215 10.4
14  2017    4   274 13.3
15  2017    5   894 43.3
16  2018    1   391 25.1
17  2018    2   125 8
18  2018    3   144 9.3
19  2018    4   196 12.6
20  2018    5   699 45
21  2019    1   474 22.4
22  2019    2   124 5.9
23  2019    3   168 8
24  2019    4   277 13.1
25  2019    5   1070    50.6
26  2020    1   148 25.3
27  2020    2   50  8.5
28  2020    3   64  10.9
29  2020    4   77  13.1
30  2020    5   247 42.2

数据代表用户多年来一直在评价Google Play商店中的应用。他们通过给1(坏)到5(大)星评级。我正在尝试使用此代码制作一张图表,按星级和年份显示星星的份额:

ggplot(year, aes(as.factor(Stars), pct)) + 
  geom_bar(aes(fill = as.factor(Year)), position = "dodge", stat="identity") + 
  scale_fill_manual(values=c("#05668D", "#028090", "#00A896", "#02C39A", "#4ecdc4", "#F0F3BD")) +
  ylab("Share of stars (in %)") +
  xlab("Stars") +
  geom_text(label=round(year$pct, digits = 1),
            position=position_dodge(0.9),
            size = 4, fontface = "bold") +
  ylim(0,50) +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        plot.title = element_text(hjust = 0.5)) +
  ggtitle("Share of stars")

[不幸的是,我遇到两个问题:1)由于某种原因,我收到以下警告消息:警告消息:

1: Removed 1 rows containing missing values (geom_bar). 
2: Removed 1 rows containing missing values (geom_text). 

意味着该数据为2020年,缺少4星,尽管它应该为13.12)我的标签到处都是,但我希望它们位于图表上相应列的上方。

有人可以帮我解决这个问题吗?

r ggplot2 label histogram
1个回答
0
投票

只需使用position_dodge2固定标签并摆脱ylim即可显示所有数据:

library(ggplot2)

ggplot(year, aes(as.factor(Stars), pct)) + 
  geom_bar(aes(fill = as.factor(Year)), position = "dodge", stat="identity") + 
  scale_fill_manual(values=c("#05668D", "#028090", "#00A896", "#02C39A", "#4ecdc4", "#F0F3BD")) +
  ylab("Share of stars (in %)") +
  xlab("Stars") +
  geom_text(aes(label=round(pct, digits = 1)),
            position=position_dodge2(0.9),
            size = 4, fontface = "bold") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        plot.title = element_text(hjust = 0.5)) +
  ggtitle("Share of stars")

“”

© www.soinside.com 2019 - 2024. All rights reserved.