为了账号安全,请及时绑定邮箱和手机立即绑定

ggplot折线图中的多行x轴标签

ggplot折线图中的多行x轴标签

慕田峪7331174 2019-08-08 15:31:55
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.xaxis.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())


查看完整回答
反对 回复 2019-08-08
?
慕少森

TA贡献2019条经验 获得超9个赞

我认为该解决方案具有很高的价值。但请注意,代码的第一行存在一个小错误,导致数据的顺序错误。代替

... aes(x = interaction(year,quarter), ...

它应该是

... aes(x = interaction(quarter,year), ...

生成的图形具有正确顺序的数据


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 1011 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信