ggplot geom_point() 具有基于特定离散值的颜色
ggplot geom_point() with colors based on specific, discrete values
我正在尝试为三个值范围绘制具有三种不同颜色的数据点。例如:
library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = qsec))
以上产生:
现在,我想修改它,使 qseq 值 <17 为黑色,17 到 19 之间的值为黄色,大于 19 的值为红色。我尝试了各种方法,但其中 none 似乎有效:
取自here
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(fill = qsec)) +
scale_fill_gradient(colours = c("black","yellow","red"),
breaks=c(0,17,19), labels = format(c("0","17","19")))
这会产生:
所以,颜色栏看起来是正确的,但实际上并没有应用颜色。
ggplot2 heatmap with colors for ranged values 中给出的解决方案看起来很有希望,但我无法让它们与 geom_point()
一起工作。
各种类似的帖子也是如此,例如边栏中列出的帖子。
我意识到我可能需要使用某种离散比例而不是 scale_fill_gradientn
但我尝试使用 scale_color_manual()
失败了:
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(color = factor(qsec))) +
scale_color_manual(values=c("black", "yellow","red")
Error: Insufficient values in manual scale. 30 needed but only 4 provided.
我猜我将不得不以某种方式使用 cut()
或 factor()
,但我似乎不知道如何使用。有什么建议吗?
您需要cut
您的值到区间:
library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) +
geom_point(aes(colour = cut(qsec, c(-Inf, 17, 19, Inf))),
size = 5) +
scale_color_manual(name = "qsec",
values = c("(-Inf,17]" = "black",
"(17,19]" = "yellow",
"(19, Inf]" = "red"),
labels = c("<= 17", "17 < qsec <= 19", "> 19"))
我正在尝试为三个值范围绘制具有三种不同颜色的数据点。例如:
library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = qsec))
以上产生:
现在,我想修改它,使 qseq 值 <17 为黑色,17 到 19 之间的值为黄色,大于 19 的值为红色。我尝试了各种方法,但其中 none 似乎有效:
取自here
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(fill = qsec)) + scale_fill_gradient(colours = c("black","yellow","red"), breaks=c(0,17,19), labels = format(c("0","17","19")))
这会产生:
所以,颜色栏看起来是正确的,但实际上并没有应用颜色。
ggplot2 heatmap with colors for ranged values 中给出的解决方案看起来很有希望,但我无法让它们与
geom_point()
一起工作。各种类似的帖子也是如此,例如边栏中列出的帖子。
我意识到我可能需要使用某种离散比例而不是 scale_fill_gradientn
但我尝试使用 scale_color_manual()
失败了:
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(color = factor(qsec))) +
scale_color_manual(values=c("black", "yellow","red")
Error: Insufficient values in manual scale. 30 needed but only 4 provided.
我猜我将不得不以某种方式使用 cut()
或 factor()
,但我似乎不知道如何使用。有什么建议吗?
您需要cut
您的值到区间:
library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) +
geom_point(aes(colour = cut(qsec, c(-Inf, 17, 19, Inf))),
size = 5) +
scale_color_manual(name = "qsec",
values = c("(-Inf,17]" = "black",
"(17,19]" = "yellow",
"(19, Inf]" = "red"),
labels = c("<= 17", "17 < qsec <= 19", "> 19"))