也有类似的帖子,分别是here和here,但是它们处理的是点颜色和大小都连续的实例。是否可以:
玩具数据
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))
答案 0 :(得分:1)
执行您最初的要求-在单个图例中连续+离散-总体上,即使从概念上讲,这似乎也是不可能的。唯一明智的做法是有两个图例大小,每个图例颜色不同。
现在让我们考虑有一个图例。给定您的“在我来说,点大小+颜色的每个唯一组合都与一个描述相关联。” ,听起来像可能的点大小很少。在这种情况下,您可以将两个刻度都用作离散刻度。但我相信,即使您对大小和色标使用不同的变量,这还是不够的。因此,一种解决方案是创建一个具有color.group
和point.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)
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"))
但是,我们也可以通过使用
来利用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)))