R 更改ggplot2中两个几何点()的颜色

R 更改ggplot2中两个几何点()的颜色,r,ggplot2,R,Ggplot2,样本数据集: library(ggplot2) df = read.table(text = "id year value1 value2 value3 1 2000 1 2000 2001 1 2001 2 NA NA 1 2002 2 2000

样本数据集:

library(ggplot2)    
df = read.table(text = 
              "id      year    value1  value2 value3
            1           2000    1   2000      2001
            1           2001    2   NA        NA
            1           2002    2   2000      NA
            1           2003    2   NA         2003
            2           2000    1   2001     2003
            2           2002    2   NA       2000
            2           2003    3   2002     NA
            3           2002    2   2001     NA
        ", sep = "", header = TRUE)
df$value1 <- as.factor(df$value1)
库(ggplot2)
df=读取。表格(文本=
“id年份值1值2值3
1           2000    1   2000      2001
2001年1月2日不适用
1 2002 2 2000 NA
1 2003 2 NA 2003
2           2000    1   2001     2003
2002年2月2日2000年
2 2003 3 2002不适用
3 2002 2 2001 NA
“,sep=”“,header=TRUE)

df$value1jlagrange的想法是正确的。在打印之前,使用
重塑2
中的
melt
将数据转换为长格式

df_long <- melt(df,id.vars = c("id", "year"), measure.vars=c("value2", "value3"))
(p <- ggplot(df_long, aes(y = id)) + 
  scale_colour_manual(name = "", values = c(value3 = "grey", value2 = "black")) +
  scale_size_manual(name = "", values = c(value3 = 3, value2 = 5)) +
  geom_point(aes(x = value, colour = variable, size = variable))
)
然后,您可以使用以下内容绘制绘图:

(p <- ggplot(df_all, aes(id, year, colour = value1)) + 
  geom_point(
    size = 3, 
    position = position_jitter(height = 0, width = 0.05)
  ) +
  scale_colour_manual(
    values = c("1" = "yellow", "2" = "orange", "3" = "red", "4" = "grey", "5" = "black")
  )
)

这就是你要找的吗

ggplot(df, aes(y=id)) +
  geom_point(aes(x=year, color=value1), size=4) +
  geom_point(aes(x=value3, colour ='value3'), size=3) +
  geom_point(aes(x=value2, colour ='value2'), size=5) +
  scale_colour_manual(name="",  
                      values = c("1"="yellow", "2"="orange", "3"="red",
                                 "value3"="grey", "value2"="black"))


基本上,只需将所有可能的颜色标签放在一个列表中。

您可以使用重塑包将列熔化在一起吗?这似乎很接近,但并不正确…需要(重塑)熔化(df,id.vars=c(“id”,“year”),measure.vars=c(“value1”,“value2”))df$可能有价值,但我正在寻找一种也适用于两个以上geom_点的解决方案()最好是直接在ggplot2中。我认为ggplot2中存在一个简单的方法,但我仍在拼命寻找它。我不明白。您的示例只给出了value2和value3的灰色和黑色绘图,但它不包括value1,是吗?@Jules您的问题读起来好像您想更改value2和value3的颜色第二个图中的2和值3。您尚未绘制一个包含所有三个值的图。如果我的解决方案不是您想要的,请澄清问题。基本上,在第一步中,我想将值1的颜色更改为黄色、橙色和红色(或连续色标,如果我有3个以上的级别,也可以使其更灵活)。在第二步中,我想将value2和value3(灰色和黑色)添加到第一步中创建的图形中,这样我就得到了一个包含所有三个值的图形。@mad您能不能用
geom\u jitter
替换
geom\u point
df_long <- melt(df,id.vars = c("id", "year"), measure.vars=c("value2", "value3"))
(p <- ggplot(df_long, aes(y = id)) + 
  scale_colour_manual(name = "", values = c(value3 = "grey", value2 = "black")) +
  scale_size_manual(name = "", values = c(value3 = 3, value2 = 5)) +
  geom_point(aes(x = value, colour = variable, size = variable))
)
df1 <- df[, c("id", "year", "value1")]

df2 <- data.frame(
  id     = df$id,
  year   = df$value2,
  value1 = "4"
)

df3 <- data.frame(
  id     = df$id,
  year   = df$value3,
  value1 = "5"
)

df_all <- rbind(df1, df2, df3)
df_all$value1 <- factor(df_all$value1)
(p <- ggplot(df_all, aes(id, year, colour = value1)) + 
  geom_point(
    size = 3, 
    position = position_jitter(height = 0, width = 0.05)
  ) +
  scale_colour_manual(
    values = c("1" = "yellow", "2" = "orange", "3" = "red", "4" = "grey", "5" = "black")
  )
)
ggplot(df, aes(y=id)) +
  geom_point(aes(x=year, color=value1), size=4) +
  geom_point(aes(x=value3, colour ='value3'), size=3) +
  geom_point(aes(x=value2, colour ='value2'), size=5) +
  scale_colour_manual(name="",  
                      values = c("1"="yellow", "2"="orange", "3"="red",
                                 "value3"="grey", "value2"="black"))