2016-12-15 55 views
0

我想改变R图(同一系列数据)中的LINE的颜色。例如,如果你有一年的星期显示温度点,并且它们与geom_line()或同等数据有关,那么我将如何显示在更高的温度周内线条变得更深,而在较冷的周内逐渐变为黄色? (如果两个点和线可以在相同的调色板/梯度上基于相同的变量 - 例如温度而变化,那将是理想的)。如何改变R图(ggplot或类似的)中的变量的LINE颜色

bp.df <- NULL 
bp.weeks <- 26 
bp.days <- 7 * bp.weeks 
bp.df$day <- 1:bp.days 
bp.df$week <- ceiling(bp.df$day/7) 
bp.mean.normal <- 100 
bp.sd.normal <- 20 

bp.df <- as.data.frame(bp.df) 

bp.df$normal <- rnorm(nrow(bp.df),bp.mean.normal, bp.sd.normal) 
bp.df$day <- as.numeric(bp.df$day) 

# make sure ggplot2 is installed and loaded 

g <- ggplot(bp.df, aes(x = day, y = normal, color = normal)) + 
    geom_point() + 
    geom_line(col = bp.df$normal) 
g 

为什么线条颜色与“正常”变量的水平不匹配?我明白,由于它们连接两个点,因此线条必须“决定”使用哪一个值,但是此输出似乎使颜色完全随机。

如果跨渐变变化将不起作用,我将如何使该行在前50天为红色,在下一个50为绿色等?

+1

它_does_匹配;它使用'normal'的值作为段的最左边的点,因为那是你通过'aes'传递的向量。为了使颜色每50天变化一次,添加一个变量以作为颜色美学传递。 'ggplot(bp.df,aes(x = day,y = normal,color = cut(day,seq(0,200,50))))+ geom_point()+ geom_line()' – alistaire

+0

谢谢,接下来的评论明确澄清了我的困惑。显然,单独的变量对于驱动颜色是有意义的。 –

回答

0

试试这个:

g <- ggplot(bp.df, aes(x=day, y = normal, color = normal)) + geom_point() + 
geom_line(aes(color=normal)) 

g 

看来山坳说法是比AES参数的颜色不同。

+0

每[此帖](http://stackoverflow.com/questions/32543340/behavior-ggplot2-aes-in-combination-with-facet-grid-when-passing-variable-wi),在' aes'会导致意想不到的结果。您可以将此代码修改为'g < - ggplot(bp.df,aes(x = day,y = normal,color = normal))+ geom_point()+ geom_line()'并获得相同的结果。由于'ggplot'中的原始'aes'参数中已经有'color = normal',所以不需要再次调用它。 –

+0

谢谢,我没有意识到这一点。这听起来像一个希望将被修复的错误。 – thc

+0

谢谢你们,非常有帮助。 –