R 如何使用ggplot设置单行的颜色 df

R 如何使用ggplot设置单行的颜色 df,r,ggplot2,R,Ggplot2,这样,Paid列作为一个单独的层添加,但这意味着它不在图例中。我不明白为什么付费专栏会以不同级别的调整器出现在传奇中。为什么呢 df<-data.frame(adjuster=c("Mary","Mary","Bob","Bob","Mary"), date=as.Date(c("2012-1-1","2012-2-1","2012-3-1","2012-4-1","2012-5-1")), total=c(10,15,25,15,20),

这样,Paid列作为一个单独的层添加,但这意味着它不在图例中。我不明白为什么付费专栏会以不同级别的调整器出现在传奇中。为什么呢

df<-data.frame(adjuster=c("Mary","Mary","Bob","Bob","Mary"), 
           date=as.Date(c("2012-1-1","2012-2-1","2012-3-1","2012-4-1","2012-5-1")), 
           total=c(10,15,25,15,20), paid=c(5,5,10,10,15))
ggplot(df)+geom_point(aes(x=date,y=total,color=adjuster,group=1))+
  geom_line(aes(x=date,y=paid,group=2,color="Paid"))+scale_color_discrete(name="Legend")+
  geom_line(aes(x=date,y=total,color=adjuster,group=1))
库(ggplot2)

df这里有一个可能的解决方案,它可以产生更清晰的绘图代码,更符合ggplot2的设计精神。代价是您的数据需要重新排列一点。我还使用了一些额外的代码来动态生成颜色值的命名字符向量。感谢@John Colby的
gg\u color\u hue()

数据现在是“长格式”,所有x值和y值都在两列中。此外,还有两个分组因素,用于区分绘制线与着色线和点的语义:

library(ggplot2)
df <- data.frame(adjuster=c("Mary","Mary","Bob","Bob","Mary"), 
           date=as.Date(c("2012-1-1","2012-2-1","2012-3-1","2012-4-1","2012-5-1")), 
           total=c(10,15,25,15,20), paid=c(5,5,10,10,15))

ggplot(df, aes(x=date,y=total,color=adjuster,group=1)) + 
  geom_point() +
  geom_line(aes(x=date, y=total, color=adjuster, group=1)) +
  geom_line(aes(x=date, y=paid, group=2), data=df, colour="black") +
  scale_color_discrete(name="Legend")


dat不就是:
+geom\u line(aes(x=date,y=paid,color=“black”)+
成功地设置了黑色,但它从我的传奇中删除了“paid”
scale\u color\u手册(name=“Legend”,values=c(“蓝”、“绿”、“黑”)
并没有使用默认颜色,但您需要的颜色对吗?唯一的问题是,调整器(即Mary和Bob)的数量各不相同。换句话说,我需要Mary和Bob的颜色是动态的,因为我的下一个数据集可能有Mary Bob和Sue。我的所有数据集都将包含一个“付费”值。在这种情况下,您可以添加“付费”作为一个单独的层,将线的颜色设置为黑色。我只需要一些注释,指示黑线是“付费”的。它不必与调整器位于同一个图例中,但我不知道如何添加两个图例。啊。我想重塑你的
数据.frame
作为下一个答案,但不确定你是否想这么做。。。
col_group line_group       date total
     Mary   Adjuster 2012-01-01    10
     Mary   Adjuster 2012-02-01    15
      Bob   Adjuster 2012-03-01    25
      Bob   Adjuster 2012-04-01    15
     Mary   Adjuster 2012-05-01    20
     Paid       Paid 2012-01-01     5
     Paid       Paid 2012-02-01     5
     Paid       Paid 2012-03-01    10
     Paid       Paid 2012-04-01    10
     Paid       Paid 2012-05-01    15
dat <- data.frame(col_group=c("Mary","Mary","Bob", "Bob", "Mary",
                              "Paid","Paid","Paid","Paid","Paid"),
                  line_group=c("Adjuster","Adjuster","Adjuster","Adjuster","Adjuster",
                               "Paid","Paid","Paid","Paid","Paid"), 
                  date=as.Date(c("2012-1-1","2012-2-1","2012-3-1","2012-4-1","2012-5-1",
                                 "2012-1-1","2012-2-1","2012-3-1","2012-4-1","2012-5-1")), 
                  total=c(10,15,25,15,20,
                          5, 5, 10,10,15))

# Color generating function found here:
# http://stackoverflow.com/questions/8197559/emulate-ggplot2-default-color-palette
gg_color_hue <- function(n) {
  hues = seq(15, 375, length=n+1)
  hcl(h=hues, l=65, c=100)[1:n]
}

# Dynamically generate default color values, but have Paid="black".
adj_names = sort(setdiff(unique(dat$col_group), "Paid"))
values = gg_color_hue(length(adj_names))
names(values) = adj_names
values = c(values, c(Paid="black"))

library(ggplot2)
plot1 <- ggplot(dat, aes(x=date, y=total, colour=col_group)) +
         geom_line(aes(group=line_group), size=1.2) +
         geom_point(size=2.8) +
         scale_colour_manual(values=values)

ggsave("plot1.png", plot=plot1, width=6, height=4.5, dpi=120)