如何使用ggplot设置单行的颜色 [英] How do I set the color of a single line using ggplot
问题描述
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))
我想强制付费"行始终为黑色,但让其他行采用ggplot提供的默认颜色.我该怎么做?
I want to force the "Paid" line to always be black, but let the other lines take the default colors provided by ggplot. How do I accomplish this?
推荐答案
以下是一种可能的解决方案,可以使绘图代码更简洁,更符合ggplot2的设计精神.代价是您的数据需要重新排列.我还使用了一些其他代码来动态生成颜色值的命名字符向量.感谢@John Colby提供的gg_color_hue()
.
Here is a possible solution that results in cleaner plotting code, more in the spirit of how ggplot2 is designed. The price is that your data needs to be rearranged a bit. I've also used some additional code to dynamically generate a named character vector of color values. Thanks to @John Colby for gg_color_hue()
.
数据现在为长格式",所有x值和y值均位于两列中.此外,还有两个分组因素,用于区分绘制线条和给线条和点着色的语义:
The data are now in 'long-form', with all x-values and y-values in two columns. Additionally, there are two grouping factors, to separate the semantics of drawing the lines versus coloring the lines and points:
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)
这篇关于如何使用ggplot设置单行的颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!