如何在ggplot中对轴标签进行分层?

时间:2017-01-05 20:18:48

标签: r ggplot2

我的数据采用以下结构:

var str = ",,,a,,,b,,,,c,,,,,,,,d,,,efg,,,";

str = `${str.match(/[^,]+/g)}`;

console.log(str);

(这两年的数据实际上从1月到12月一直持续,这只是一个简短的可重复的例子。)

我正在使用ggplot进行month <- c("May", "June", "July", "May", "June", "July") year <- c("2015", "2015", "2015", "2016", "2016", "2016") value <- c(1:3, 3:1) df <- data.frame(month, year, value) 的时间序列图(假设我不能使用value,原因太复杂,无法在此解释)。如何对x轴的标签进行分层,这样每个刻度标记都标有月份,但是在下面有一个标签下面有另一个标签,所以我得到类似的东西:

plot.ts()

2 个答案:

答案 0 :(得分:4)

我不会制作两个轴而只是一个轴,调整后的标签带有换行符。该示例显示了如何在每月下面添加年份。我习惯只把年份放在1月以下,如果januari不是第一个月的年份。您可以根据自己的喜好调整标签的准备工作。

df$lab <- factor(1:6, labels = paste0(month,"\n",year))
ggplot(df, aes(x = lab, y = value)) + geom_point()

enter image description here

答案 1 :(得分:2)

另一种选择是按年使用刻面并将刻面标签放在x轴标签下方。这使得每年只有一年的标签更容易。我已经删除了面板之间的空间,以创建一个无面的情节的外观,但在年份之间添加了一条垂直线以突出显示时间的中断。如果您更喜欢单独的面板,则只需删除panel.spacingpanel.border theme元素。

theme_set(theme_classic())

df$month = factor(df$month, levels=month.name)

ggplot(df, aes(x = month, y = value)) + 
  geom_point() +
  facet_grid(. ~ year, switch="x") +
  theme(strip.placement="outside",
        strip.background=element_rect(colour=NA),
        panel.spacing.x=unit(0,"lines"),
        panel.border=element_rect(colour="grey50", fill=NA))

enter image description here

根据您的使用情况,您可能会发现每年最好使用颜色美学,并将所有线条放在一个面板上:

ggplot(df, aes(x = month, y = value, colour=year, group=year)) + 
  geom_line() + geom_point() 

enter image description here