为中间线使用不同的颜色并添加为图例

时间:2017-10-02 15:37:34

标签: r ggplot2 legend median

这是参考@simoncolumbus的上一个问题并由@Roland here回答。我试图复制此解决方案失败。我收到了错误:

  

“ggplot2不知道如何处理class uneval的数据”。

以前有几个关于此错误的帖子,但在不同的上下文中。所以请不要将这篇文章标记为重复。

我有600名受访者的数据集。我有一个指标变量,其中包括2013年,2014年,2015年,2016年,2017年5年内每600名受访者的价值。此外,我为每位受访者提供了一个城市列。这是一个3级因子变量。

我创建了一个情节,用600个受访者中的每一个绘制指标趋势线,使用与受访者所属城市相对应的3种颜色。 Y轴是指标值,X轴是年。我已经按城市分隔了线图的颜色。

我添加了3条中间指标线,这样每个城市的受访者都有一条中间线。默认情况下,中间线采用每个组的趋势线颜色。这是一个问题,因为中线与各个趋势线合并,使得难以区分。我想为中间线使用单独的颜色,并将其添加到图例中。我使用以下代码:

library(ggplot2)
library(dplyr)
library(tidyr)
library(magrittr)

sample_no <- c(1:600)
city <- c(rep("A",150), rep("B",250), rep("C", 200))
indicator_2013 <- runif(600, min=0, max=1000)
indicator_2014 <- runif(600, min=0, max=1000)
indicator_2015 <- runif(600, min=0, max=1000)
indicator_2016 <- runif(600, min=0, max=1000)
indicator_2017 <- runif(600, min=0, max=1000)

df <- data.frame(sample_no, city, indicator_2013, indicator_2014, 
                 indicator_2015, indicator_2016, indicator_2017)
df1 <- df %>%
  gather(indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017, 
         key="Year", value = "Indicator")

df1 %>%
  ggplot(aes(x=Year, y=Indicator, color=city)) +
  geom_line(aes(group = sample_no), alpha = .5, size = 0.7) +
  scale_x_discrete(expand = c(0.03, 0.03)) + 
  labs(col = "City") +
  theme(legend.position = c(0.15,0.8), legend.background = element_blank()) +
  stat_summary(aes(y = Indicator, group = city), 
               fun.y=median, geom = "line", linetype="dotted", size = 1, 
               aes(color = paste("median", city)))

注意:这只是虚拟数据,因此图形是对称的......

我在stat_summary中添加了代码aes(color = paste("median", city))以帮助绘制差异颜色的中位数,并将这些添加为图例以及各个趋势线的图例,但是我得到了类uneval错误。我还尝试了stat_summary之外的scale_color_manual选项,但是也改变了各个趋势线的颜色以及中位数 - 我需要将各个趋势线颜色从中间线区域变为差异。感谢帮助!

0 个答案:

没有答案