猿问

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

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")


慕田峪7331174
浏览 1018回答 3
3回答

holdtom

使用添加新标签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())

慕少森

我认为该解决方案具有很高的价值。但请注意,代码的第一行存在一个小错误,导致数据的顺序错误。代替... aes(x = interaction(year,quarter), ...它应该是... aes(x = interaction(quarter,year), ...生成的图形具有正确顺序的数据
随时随地看视频慕课网APP
我要回答