scale_x_discrete未显示在地块

时间:2017-12-04 21:42:21

标签: r ggplot2

我有一个如下所示的数据集:

df <- data.frame(
  EventMonth = c('2015-01', '2015-02', '2015-03', '2015-04', '2015-05', '2015-06', '2015-07', '2015-08', '2015-09', '2015-10', '2015-11', '2015-12',
                 '2016-01', '2016-02', '2016-03', '2016-04', '2016-05', '2016-06', '2016-07', '2016-08', '2016-09', '2016-10', '2016-11', '2016-12'),
  EventQuarter = c('2015-Q1', '2015-Q1', '2015-Q1', '2015-Q2', '2015-Q2', '2015-Q2', '2015-Q3', '2015-Q3', '2015-Q3', '2015-Q4', '2015-Q4', '2015-Q4',
                   '2016-Q1', '2016-Q1', '2016-Q1', '2016-Q2', '2016-Q2', '2016-Q2', '2016-Q3', '2016-Q3', '2016-Q3', '2016-Q4', '2016-Q4', '2016-Q4'),
  score = c(2.59, 2.58, 2.82, 2.60, 2.69, 2.76, 2.68, 2.65, 2.58, 2.51, 2.90, 2.50, 2.65, 2.87, 2.48, 2.59, 2.83, 2.63, 2.73, 2.41, 2.63, 2.60, 2.64, 2.51),
  stringsAsFactors = F
)

我正在使用如下命令来显示折线图:

ggplot(df, aes(EventMonth, score)) +
  geom_line(stat='identity', group = 1) +
  theme_few() + ylim(0, survey[item == col, max.val])  +
  ylab(survey[item == col, title]) +
  theme(axis.text.x = element_text(angle=90)) +
  stat_smooth(aes(as.integer(as.factor(EventMonth)), score), method='loess')

这很好用,但X轴上有太多的刻度线。我希望每季度只显示一个刻度线。

作为一个起点,我尝试将此添加到命令中,只显示每个季度的一些任意值:

+ scale_x_discrete('Event Quarter', c(2, 5, 8, 11), c('a', 'b', 'c', 'd')

但这只会使整个x轴刻度和标签消失,而不会在我希望看到它们的地方显示a,b,c,d。我做错了什么?

另外,我的x轴是一个整数轴,所以我也尝试使用scale_x_continuous但是也无法使用它。它抱怨我为连续比例提供离散值:scale_x_continuous('Event Quarter', c(2, 5, 8, 11), c('a', 'b', 'c', 'd'))

1 个答案:

答案 0 :(得分:1)

答案是breaks函数中scale_x_discrete的值不是整数,而是映射到字符串值。

基本上,即使我的数据df$EventMonth的类型为character,ggplot也会将其转换为显示它的因子。虽然你会认为使用像1,2,3,......这样的值来引用x轴应该可行(毕竟,因子是带有一些标签的numeric类型),但它在这里不起作用;相反,如果您在breaks的参数中传递字符值(即该因子的级别),它将起作用。

以下是工作代码:

ggplot(df, aes(EventMonth, score)) +
  geom_line(stat='identity', group = 1) +
  theme_few() + ylim(0, survey[item == col, max.val])  +
  ylab(survey[item == col, title]) +
  theme(axis.text.x = element_text(angle=90)) +
  stat_smooth(aes(as.integer(as.factor(EventMonth)), score), method='loess') +
  scale_x_discrete('Event Quarter',
                   c('2015-02', '2015-05', '2015-08', '2015-11'),
                   c('2015-Q1', '2015-Q2', '2015-Q3', '2015-Q4'))