ggplot2图例:结合离散颜色和连续点大小

时间:2018-12-13 13:34:59

标签: r ggplot2

也有类似的帖子,分别是herehere,但是它们处理的是点颜色和大小都连续的实例。是否可以:

  1. 在单个图例中合并离散的颜色和连续的点大小吗?
  2. 在同一个图例中,在每个点上添加一个描述来代替数字中断标签吗?

玩具数据

xval = as.numeric(c("2.2", "3.7","1.3"))
yval = as.numeric(c("0.3", "0.3", "0.2"))
color.group = c("blue", "red", "blue")
point.size = as.numeric(c("200", "11", "100"))
description = c("descript1", "descript2", "descript3")

df = data.frame(xval, yval, color.group, point.size, description)

ggplot(df, aes(x=xval, y=yval, size=point.size)) + 
  geom_point(color = df$color.group) +
  scale_size_continuous(limits=c(0, 200), breaks=seq(0, 200, by=50))

1 个答案:

答案 0 :(得分:1)

执行您最初的要求-在单个图例中连续+离散-总体上,即使从概念上讲,这似乎也是不可能的。唯一明智的做法是有两个图例大小,每个图例颜色不同。


现在让我们考虑有一个图例。给定您的“在我来说,点大小+颜色的每个唯一组合都与一个描述相关联。” ,听起来像可能的点大小很少。在这种情况下,您可以将两个刻度都用作离散刻度。但我相信,即使您对大小和色标使用不同的变量,这还是不够的。因此,一种解决方案是创建一个具有color.grouppoint.size的所有可能组合的单个因子变量。特别是

df <- data.frame(xval, yval, f = interaction(color.group, point.size), description)
ggplot(df, aes(x = xval, y = yval, size = f, color = f)) + 
  geom_point() + scale_color_discrete(labels = 1:3) +
  scale_size_discrete(labels = 1:3)

enter image description here

1:3是您想要的描述,您也可以按照自己喜欢的方式设置颜色。例如,

ggplot(df, aes(x = xval, y = yval, size = f, color = f)) + 
  geom_point() + scale_size_discrete(labels = 1:3) +
  scale_color_manual(labels = 1:3, values = c("red", "blue", "green"))

enter image description here

但是,我们也可以通过使用

来利用color.group
ggplot(df, aes(x = xval, y = yval, size = f, color = f)) + 
  geom_point() + scale_size_discrete(labels = 1:3) +
  scale_color_manual(labels = 1:3, values = gsub("(.*)\\..*", "\\1", sort(df$f)))

enter image description here