我想知道是否可以根据ggplot2中的x和y值分配点颜色?
例如,我要分配点(x <0.75&y <2)红色;其中(0.75 <= x&2 <= y <4)蓝色;以及(0.75 <= x&y> = 4)绿色。
我知道可以通过对数据框进行细分,然后将它们绘制在一起来完成,但是我想知道是否有一种简单的方法。
library(ggplot2)
data("iris")
ggplot() + geom_point(data = iris, aes(x = Petal.Width,
y = Petal.Length))
答案 0 :(得分:2)
尝试一下:
library(dplyr)
library(ggplot2)
my_data <- iris %>%
mutate(width_length = paste0(cut(Petal.Width, c(0, 0.75, 2.25, Inf), right=FALSE), ' _ ',
cut(Petal.Length, c(0, 2, 4, Inf), right=FALSE)))
ggplot(my_data) +
geom_point(aes(x = Petal.Width,
y = Petal.Length,
color = width_length))
答案 1 :(得分:2)
要扩展我的评论,请根据条件创建自定义颜色列,并在scale_colour_identity
中使用col参数:
library(ggplot2)
# Make a custom colour column based on conditions
# here I used one condition, you can keep nesting ifelse for more conditions
iris$myCol <- ifelse(iris$Petal.Width < 0.75 & iris$Petal.Length, "red", "green")
ggplot(iris) +
geom_point(data = iris,
aes(x = Petal.Width, y = Petal.Length, col = myCol)) +
scale_colour_identity()
答案 2 :(得分:1)
如果只需要一次此着色信息,则只需在绘图前立即使用此变量临时扩展虹膜即可,以获得IMHO清洁代码。
library(dplyr)
library(ggplot2)
iris %>%
mutate(width_length =
paste0(cut(Petal.Width, c(0, 0.75, 2.25, Inf), right=FALSE),
' _ ',
cut(Petal.Length, c(0, 2, 4, Inf), right=FALSE)))
ggplot() +
geom_point(aes(x = Petal.Width,
y = Petal.Length,
color = width_length))
这样,您就不会在工作区中弄乱了仅使用一个但仍然保留的另一个数据帧。