我有一个如下所示的数据集:
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'))
答案 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'))