我想知道是否有可能根据分类变量
更改填充主色这是一个可重现的例子
for
当然根据变量grp很容易改变圆形颜色/形状,但是我希望有一组红色和b组蓝色。 我还考虑过使用facet,但不知道是否可以为两个面板更改填充渐变。
任何人都知道如果没有gridExtra可以做到这一点吗?
谢谢!
答案 0 :(得分:2)
我认为有两种方法可以做到这一点。第一个是对alpha
列使用val
美学。这是实现目标的快捷方式,但可能并不完全符合您的要求:
ggplot(data = df,
aes(x = x,
y = y)) +
geom_point(pch = 21,
aes(alpha=val,
fill = grp,
size = val)) + theme_minimal()
第二种方法是做类似这篇文章:Vary the color gradient on a scatter plot created with ggplot2。我稍微编辑了代码,因此它不是从白色到您感兴趣的颜色的范围,而是从浅色到深色。这需要一些工作并使用scale_fill_identity
函数,该函数基本上采用具有所需颜色的变量并将它们直接映射到每个点(因此它不会进行任何缩放)。
此代码为:
#Rescale val to [0,1]
df$scaled_val <- rescale(df$val)
low_cols <- c("firebrick1","deepskyblue")
high_cols <- c("darkred","deepskyblue4")
df$col <- ddply(df, .(grp), function(x)
data.frame(col=apply(colorRamp(c(low_cols[as.numeric(x$grp)[1]], high_cols[as.numeric(x$grp)[1]]))(x$scaled_val),
1,function(x)rgb(x[1],x[2],x[3], max=255)))
)$col
df
ggplot(data = df,
aes(x = x,
y = y)) +
geom_point(pch = 21,
aes(
fill = col,
size = val)) + theme_minimal() +scale_fill_identity()
答案 1 :(得分:0)
感谢this other post我发现了一种可视化图例中填充条的方法,即使这不是我的目的。
这是ouptup
代码
df = data.frame(x = c(rnorm(10, mean = 0),
rnorm(10, mean = 3)),
y = c(rnorm(10, mean = 0),
rnorm(10, mean = 3)),
grp = factor(c(rep('a', times = 10),
rep('b', times = 10)),
levels = c('a', 'b')),
val = rep(1:10, times = 2)) %>%
group_by(grp) %>%
mutate(scaledVal = rescale(val)) %>%
ungroup %>%
mutate(scaledValOffSet = scaledVal + 100*(as.integer(grp) - 1))
scalerange <- range(df$scaledVal)
gradientends <- scalerange + rep(c(0,100,200), each=2)
ggplot(data = df,
aes(x = x,
y = y)) +
geom_point(pch = 21,
aes(fill = scaledValOffSet,
size = val)) +
scale_fill_gradientn(colours = c('white',
'darkred',
'white',
'deepskyblue4'),
values = rescale(gradientends))
基本上应该重新缩放填充值(例如在0和1之间)并使用另一个数量级将它们分开,由分类变量grp提供。 这不是我想要的:当然,可以改进代码片段,使整个事情减少手动,但仍然缺乏简单的通常离散填充图例。