R图颜色不正确ggplot

时间:2015-01-11 20:00:22

标签: r ggplot2

我正在绘制折线图并突出显示了一些要点。这是我得到的错误的玩具示例:

library('ggplot2')
time <- as.POSIXct(c("2014-12-10 20:51:53.103","2014-12-10 20:56:54.204",
                     "2014-12-10 20:57:54.204"), tz= "GMT")
p <- c(49.32, 60,50)
s <- c("B","","S")
pointcolor <- c("green","","red")
share <- c(35,0,6)
pointsize <- c(10,10,10)
shapeType <- c(16,10,16)
bigDF <- data.frame(time=time, p=p, s=s, pointcolor=pointcolor, share=share,
                    pointsize=pointsize, shapeType=shapeType)
bigDF
ggplot(bigDF, aes(x=time, y=p)) + geom_line() + 
  geom_point( aes(shape = as.factor(shapeType), 
                  size = pointsize, color = pointcolor))
scale_color_manual(values = levels(as.factor(bigDF$pointcolor)))
scale_size_manual(values = levels(as.factor(bigDF$pointsize)))

当你运行时,你得到一个如下图形: enter image description here

我试图将第一个点着色为绿色,第二个点应为黑色,第三个点应为红色。但你可以看到第二点是红色,第三点是蓝色而不是红色。

我有一些问题:

为什么第二点红色不是黑色?

为什么第三点蓝色不是红色?

为什么pointcolor图例显示红点而没有描述?

谢谢。

2 个答案:

答案 0 :(得分:1)

您正在尝试使用ggplot,就像它的基本图形一样。一般来说,数据集不具有字面颜色&#34;列,这就是为什么将列映射到&#34; color&#34; (aes(color = column))与要使用的颜色选择(scale_color_*())分开。

由于语法错误,您没有任何黑点。您错过了+标志以将scale添加到地块中,因此您实际使用分配给{{1的默认ggplot颜色(红色,绿色,3级) }}按默认字母顺序排列,先是pointcolor,然后是"",然后是"green"

通过添加"red"来修复该错误不够,因为+不是一种颜色。我想你要求的是这样的东西:

""

应该做的是在数据中有一个有意义的列,然后在scale函数中定义它的比例,而不是尝试编码您的颜色会缩放到您的数据中。

有意义的专栏:

通过有意义的数据列,我的意思是那些实际上是数据的。我不确定您的数据,但我认为您有意义的列是bigDF$pointcolor = factor(ifelse(bigDF$pointcolor == "", "black", bigDF$pointcolor)) ggplot(bigDF, aes(x=time, y=p)) + geom_line() + geom_point( aes(shape = as.factor(shapeType), size = pointsize, color = pointcolor)) + scale_color_manual(values = levels(bigDF$pointcolor)) timep和{{1} }。

您还没有指定,看起来您的颜色基于您的变量s,并且(更大的猜测)形状是您的变量share是否为0 。 应该像这样绘制:

s

请注意,数据框架更简单,没有颜色或形状,因为那些不是您的数据share函数负责将数据映射到颜色和形状,dd <- data.frame(time=time, p=p, s=s, share=share) ggplot(dd, aes(x = time, y = p)) + geom_line() + geom_point(aes(color = s, shape = share > 0), size = 10) + scale_color_manual(values = c("black", "green", "red")) + scale_shape_manual(values = c(16, 10)) 函数确定结果采用的值。请注意,默认图例标签现在很有用!

这就是ggplot的使用方式。数据不需要额外的列来描述图形,图表的代码更短更清晰,图例上的标签与数据框中的标签一样好。

答案 1 :(得分:0)

您需要实际指定黑色是黑色而不是""。您可以使用pointcolor <- c("green","black","red")构建DF。这只是简化了输入。

library(ggplot2)
ggplot(bigDF, aes(x=time, y=p)) + geom_line() + 
  geom_point( aes(shape = as.factor(shapeType),size = pointsize, 
                  colour = c("green","black","red"))) +
  scale_color_manual(values = c("green","black","red"))