根据x和y值分配点颜色

时间:2019-03-22 12:12:59

标签: r ggplot2

我想知道是否可以根据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))

enter image description here

3 个答案:

答案 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))

输出: enter image description here

答案 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))   

这样,您就不会在工作区中弄乱了仅使用一个但仍然保留的另一个数据帧。