R图颜色不正确ggplot
R graph colors are not correct ggplot
我正在绘制折线图并突出显示了一些点。这是我得到的错误的玩具示例:
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)))
当您 运行 时,您得到的图表如下所示:
我正在尝试将第一个点涂成绿色,第二个点应该是黑色,第三个点应该是红色。但是你可以看到第二个点是红色的,第三个点是蓝色的而不是红色。
我有一些问题:
为什么第二个点是红色而不是黑色?
为什么第三个点是蓝色而不是红色?
为什么点色图例显示一个红点并且没有描述?
谢谢。
您需要实际指定黑色为黑色而不是""
。您可以保留使用 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"))
您正在尝试将 ggplot 当作基本图形来使用。通常,数据集没有文字 "color" 列,这就是为什么将列映射到 "color" (aes(color = column)
) 与要使用的颜色选择 (scale_color_*()
).
由于语法错误,您没有任何黑点。您缺少将 scale
添加到绘图中的 +
标志,因此您实际上使用分配给 pointcolor
的默认 ggplot 颜色(红色、绿色蓝色、3 个级别)默认字母顺序的因素,首先是 ""
,然后是 "green"
,然后是 "red"
.
通过输入 +
来修复该错误是不够的,因为 ""
不是一种颜色。我想你是在要求这样的东西:
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))
但是您应该做的是在您的数据中有一个有意义的列,然后在比例函数,而不是尝试将色标编码到数据中。
有意义的列:
有意义的 数据列,我指的是那些实际上是数据的列。我不确定您的数据 是 ,但我认为您有意义的列是 time
、p
、s
和 share
.
你没有指定,看起来你的颜色是基于你的变量 s
,并且(更大的猜测)形状是你的变量 share
是否为 0 .这个应该画成这样:
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))
请注意,数据框更简单,没有颜色或形状,因为这些不是您的数据。 aes()
函数负责将数据映射到颜色和形状,scale
函数确定结果采用的值。并注意默认的图例标签现在很有用了!
这就是 ggplot 的使用方式。数据不需要额外的列来描述图表,绘图代码更短更清晰,图例上的标签与数据框中的标签一样好。
我正在绘制折线图并突出显示了一些点。这是我得到的错误的玩具示例:
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)))
当您 运行 时,您得到的图表如下所示:
我正在尝试将第一个点涂成绿色,第二个点应该是黑色,第三个点应该是红色。但是你可以看到第二个点是红色的,第三个点是蓝色的而不是红色。
我有一些问题:
为什么第二个点是红色而不是黑色?
为什么第三个点是蓝色而不是红色?
为什么点色图例显示一个红点并且没有描述?
谢谢。
您需要实际指定黑色为黑色而不是""
。您可以保留使用 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"))
您正在尝试将 ggplot 当作基本图形来使用。通常,数据集没有文字 "color" 列,这就是为什么将列映射到 "color" (aes(color = column)
) 与要使用的颜色选择 (scale_color_*()
).
由于语法错误,您没有任何黑点。您缺少将 scale
添加到绘图中的 +
标志,因此您实际上使用分配给 pointcolor
的默认 ggplot 颜色(红色、绿色蓝色、3 个级别)默认字母顺序的因素,首先是 ""
,然后是 "green"
,然后是 "red"
.
通过输入 +
来修复该错误是不够的,因为 ""
不是一种颜色。我想你是在要求这样的东西:
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))
但是您应该做的是在您的数据中有一个有意义的列,然后在比例函数,而不是尝试将色标编码到数据中。
有意义的列:
有意义的 数据列,我指的是那些实际上是数据的列。我不确定您的数据 是 ,但我认为您有意义的列是 time
、p
、s
和 share
.
你没有指定,看起来你的颜色是基于你的变量 s
,并且(更大的猜测)形状是你的变量 share
是否为 0 .这个应该画成这样:
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))
请注意,数据框更简单,没有颜色或形状,因为这些不是您的数据。 aes()
函数负责将数据映射到颜色和形状,scale
函数确定结果采用的值。并注意默认的图例标签现在很有用了!
这就是 ggplot 的使用方式。数据不需要额外的列来描述图表,绘图代码更短更清晰,图例上的标签与数据框中的标签一样好。