r - ggplot2 将数据标签添加到分组直方图
问题描述
我有一个名为“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 年的数据,虽然应该 13.1 缺少 4 颗星 2)我的标签到处都是,而我希望它们位于图表上相应列的上方。
有人可以帮我解决这个问题吗?
解决方案
您需要正确设置分组才能使闪避起作用。我们可以关闭轴扩展,而不是使用ylim
切断您的一个条形图,这对于下降到 0 的条形图看起来更好。(您可能需要使用ylim
更高的值以确保打印所有标签。)
ggplot(year, aes(as.factor(Stars), pct)) +
geom_col(aes(fill = as.factor(Year)), position = "dodge") +
geom_text(
aes(label = round(pct, digits = 1), group = interaction(Stars, Year)),
position = position_dodge(0.9), size = 3, fontface = "bold", vjust = 0
) +
scale_fill_manual(values=c("#05668D", "#028090", "#00A896", "#02C39A", "#4ecdc4", "#F0F3BD")) +
scale_y_continuous(expand = c(0, 0)) +
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)
) +
labs(title = "Share of stars", x = "Share of stars (in %)", y = "Stars", fill = "Year")
推荐阅读
- python - python:读取内联标签txt文件并将其格式化为列
- microsoft-cognitive - 如何通过发送到认知服务来防止保留或重复使用数据?
- c# - 我需要有关功能的帮助
- c# - C# SetWinEventHook 在鼠标移动时停止发送消息
- html - 替代样式表未显示在 Firefox 的“查看 > 页面样式”下
- powershell - 如何混合编码和非编码脚本?
- python - 如何使用pymysql在python中将NULL插入日期时间
- html - 为什么我的是/否下拉菜单总是显示是?
- php - 此 select 语句中的语法错误在哪里?
- apache-kafka-streams - KStreamWindowAggregate 似乎共享流时间导致窗口过期