用颜色变量用R中的ggplot2绘制数据

时间:2017-02-25 16:14:26

标签: r plot ggplot2 colors

这是前一个问题的延伸:

Assign colors to a data frame based on shared values with a character string in R

我现在有一个包含xyerrrsnewcolors的数据框,我想使用ggplot2按颜色绘制数据和误差线。我试过这个,情节很好,但颜色甚至都不正确。我已经尝试在ggplot()调用中的不同位置定义颜色变量,但没有运气。我错过了什么?

以下是数据:

names          <- c( "TC3", "102", "172", "136", "142", "143", "AC2G" )
colors         <- c( "darkorange", "forestgreen", "darkolivegreen", "darkgreen", "darksalmon", "firebrick3", "firebrick1" )
dataA          <- c( "JR13-101A", "TC3B", "JR12-136C", "AC2GA", "TC3A" )
newcolors      <- rep( NA, length( dataA ) )
dataA          <- as.data.frame( cbind( dataA, newcolors ) )
x              <- c( 1, 2, 3, 4, 5 )
y              <- c( 10, 6, 3, 18, 2 )
errs           <- c( 2, 1, 2, 1, 2 )

dataA          <- cbind( dataA, x, y, errs )

以及@ Dave2e之前的问题的解决方案,它按样本名称分配颜色:

dataA$newcolors <- as.character( dataA$newcolors )
 for( j in 1:length( names ) ) {
  dataA$newcolors[ grep( names[ j ], dataA$dataA ) ] <- colors[ j ] 
}

最后我试过的绘图代码:

ggplot( dataA, aes( x = x, y = y) ) +
  geom_errorbar( aes( ymin = y - errs, ymax = y + errs, color = newcolors ), 
                 width = 0.03 ) + 
  geom_point( size = 5, aes( color = newcolors) ) 

(我也尝试通过aes()将颜色放入aes( x = x, y = y, color = newcolors前调用。除了颜色不正确之外,情节看起来还不错。 "darkorange"显示为浅绿色"darkgreen"呈粉红色,"firebrick1"为浅蓝色。

1 个答案:

答案 0 :(得分:2)

在回应OP的this comment时,您可以尝试

ggplot(dataA, aes(x = x, y = y, fill = I(newcolors))) +
  geom_errorbar(aes(ymin = y - errs, ymax = y + errs), 
                 width = 0.03) + 
  geom_point(size = 5, shape = 21) 

enter image description here

geom_point()尺寸,形状和边框颜色已经明确定义,即在aes()的调用之外。填充编号为21到24的形状(有关可用形状,请参阅http://ggplot2.tidyverse.org/reference/scale_shape.html)。因此,在fill的调用中定义了color美学而非aes()美学。因此,默认情况下,错误栏和符号边框将以黑色打印。

可能的优点(或缺点)是已将NA指定为newcolor的数据点可见。

为了进行比较,下面是从Richard Telford's comment获取建议后情节的展示方式:

ggplot(dataA, aes(x = x, y = y, color = I(newcolors))) +
  geom_errorbar(aes(ymin = y - errs, ymax = y + errs), 
                width = 0.03) + 
  geom_point(size = 5) 

enter image description here

请注意,ggplot2删除了最左边的数据点,因为没有分配给此数据点的颜色,即NA

  

警告信息:
  删除了包含缺失值的1行(geom_point)。