如何在ggplot折线图中显示全部年份X轴标签?
ggplot折线图X轴显示所有年份的解决方案
问题说明
使用ggplot的geom_line绘制折线图时,X轴为整数类型的年份YEAR,Y轴是连续变量N,按STATUS字段设置线型分组。需求是让X轴显示所有年份,但遇到两个问题:
- 将
YEAR转为因子后,出现报错提示Do you need to adjust the group aesthetic?,添加group=1会破坏分组折线的结构; - 使用
scale_x_continuous("year", labels = as.character(year), breaks = year)时,报错Error in check_breaks_labels(breaks, labels) : object 'YEAR' not found,尝试scale_x_discrete也无效果。
数据样例
YEAR N STATUS <int> <int> <chr> 1 2019 3704204 P 2 2020 2590358 P 3 2021 2240046 P 4 2019 5095171 I 5 2020 5783109 I 6 2021 3389832 I
当前可运行但X轴隐藏部分年份的代码
ggplot(df1, aes(YEAR, N)) + geom_line(aes(linetype = STATUS))
解决方案
方法1:基于连续型X轴强制显示所有年份
无需转换YEAR的类型,直接提取数据中所有唯一年份作为scale_x_continuous的breaks参数值,即可强制X轴显示每一个年份:
# 获取数据中所有唯一年份 all_years <- unique(df1$YEAR) ggplot(df1, aes(YEAR, N)) + geom_line(aes(linetype = STATUS)) + scale_x_continuous( name = "年份", breaks = all_years, labels = as.character(all_years) )
方法2:转换YEAR为因子并正确设置分组
如果必须将YEAR转为因子,需将group属性绑定到STATUS,而非1,这样既能保留分组折线,又能让X轴显示所有年份:
# 将YEAR转换为因子类型 df1$YEAR <- as.factor(df1$YEAR) ggplot(df1, aes(YEAR, N)) + geom_line(aes(linetype = STATUS, group = STATUS)) + scale_x_discrete(name = "年份")
内容的提问来源于stack exchange,提问作者Júlio César Mugnol
相关产品推荐
相关产品推荐

