【发布时间】:2017-11-30 19:18:58
【问题描述】:
给定下面显示的数据集,我运行这个命令来绘制一个带有重叠平滑曲线的折线图:
ggplot(tmp,
aes(CalendarMonth, Score)) +
geom_line(stat='identity', group = 1) + ylim(0, 3) +
theme_few() + ylab('Average score in the month') +
theme(axis.text.x = element_text(angle=90)) +
stat_smooth(aes(CalendarMonth, Score), method='loess')
但这只画了一个折线图,即不管我运行stat_smooth部分还是不去,输出没有变化,平滑曲线也没有叠加。我在这里错过了什么?
数据:
tmp <- data.frame(
CalendarMonth = c('2012-07', '2012-08', '2012-06', '2012-05', '2012-04', '2012-09',
'2012-10', '2012-11', '2012-12', '2013-01', '2013-02', '2013-03', '2013-04', '2013-05',
'2013-06', '2013-07', '2013-08', '2013-09', '2013-10', '2013-11', '2013-12', '2014-01',
'2014-02', '2014-03', '2014-04', '2014-05', '2014-06', '2014-07', '2014-08', '2014-09',
'2014-10', '2014-11', '2014-12', '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', '2017-01', '2017-02', '2017-03', '2017-04', '2017-05',
'2017-06', '2017-07', '2017-08', '2017-09'),
Score = c(2.716667, 2.577465, 2.615385, 3.000000, 3.000000, 2.446429,
2.426667, 2.683544, 2.526316, 2.568966, 2.506849, 2.537500, 2.578125,
2.470588, 2.741935, 2.560261, 2.479195, 2.545605, 2.577778, 2.539216,
2.556492, 2.535593, 2.567829, 2.557214, 2.587662, 2.580189, 2.512069,
2.572402, 2.582792, 2.555938, 2.512586, 2.561224, 2.572308, 2.557940,
2.540000, 2.593333, 2.513274, 2.566952, 2.548649, 2.623223, 2.565079,
2.537344, 2.516667, 2.509485, 2.519084, 2.544262, 2.612795, 2.496429,
2.467128, 2.596226, 2.560714, 2.563253, 2.588462, 2.569395, 2.668919,
2.581197, 2.543253, 2.524648, 2.594796, 2.551613, 2.583333, 2.474074,
2.627306, 2.505017, 2.561086, 2.554545)
)
【问题讨论】:
-
在
stat_smooth()调用中将CalendarMonth转换为整数;即aes(as.integer(CalendarMonth),Score). -
这并没有完全奏效。但是
aes(as.integer(as.factor(CalendarMonth))确实有效。如果您将其发布为答案,我将其标记为这样 -
实际上,根据您在问题中提供的信息,我的解决方案有效。如果您需要先将该列转换为因子,则意味着您机器上的数据与您在问题中提供的数据不同。默认情况下,在字符向量上调用
data.frame()会创建一个因子,因此as.integer无需任何其他命令即可工作。 -
公平。我已经简化了这个问题,通过它,我忘记了我的原始代码中有
stringsAsFactors = F的事实。 -
我仍然认为答案的功劳应该归您所有,所以如果您将此作为答案发布,我将其标记为这样。