ggplot折线图中的多行x轴标签Excel枢轴图中有一个功能,允许多级分类轴。我正在尝试找到一种方法ggplot(或R中的任何其他绘图包)。请考虑以下数据集:set.seed(1)df=data.frame(year=rep(2009:2013,each=4),
quarter=rep(c("Q1","Q2","Q3","Q4"),5),
sales=40:59+rnorm(20,sd=5))如果将其导入Excel数据透视表,则可以直接创建以下图表:注意x轴有两个级别,一个用于四分之一,一个用于分组变量year。是否可以使用多级轴ggplot?注意:有一个带有小平面的黑客会产生类似的东西,但这不是我想要的。library(ggplot2)ggplot(df) +
geom_line(aes(x=quarter,y=sales,group=year))+
facet_grid(.~year,scales="free")
3 回答
holdtom
TA贡献1805条经验 获得超10个赞
使用添加新标签annotate(geom = "text",
。用clip = "off"
in 关闭x轴标签的剪裁coord_cartesian
。
使用theme
添加额外的利润(plot.margin
)和remove(element_blank()
)x轴文本(axis.title.x
,axis.text.x
)和垂直网格线(panel.grid.x
)。
library(ggplot2)ggplot(data = df, aes(x = interaction(year, quarter, lex.order = TRUE), y = sales, group = 1)) + geom_line(colour = "blue") + annotate(geom = "text", x = seq_len(nrow(df)), y = 34, label = df$quarter, size = 4) + annotate(geom = "text", x = 2.5 + 4 * (0:4), y = 32, label = unique(df$year), size = 6) + coord_cartesian(ylim = c(35, 65), expand = FALSE, clip = "off") + theme_bw() + theme(plot.margin = unit(c(1, 1, 4, 1), "lines"), axis.title.x = element_blank(), axis.text.x = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank())
慕少森
TA贡献2019条经验 获得超9个赞
我认为该解决方案具有很高的价值。但请注意,代码的第一行存在一个小错误,导致数据的顺序错误。代替
... aes(x = interaction(year,quarter), ...
它应该是
... aes(x = interaction(quarter,year), ...
生成的图形具有正确顺序的数据
- 3 回答
- 0 关注
- 1011 浏览
添加回答
举报
0/150
提交
取消