我找不到如何为传递给geom_bin2d的两个不同数据集正确指定两个色标。
下面的代码无法正常工作,在抛出以下错误消息后,第一个“ scale_fill_gradient”调用将被忽略,并且仅使用最后一个(白色到蓝色):
“填充”的刻度已经存在。为“填充”添加另一个比例,它将替换现有比例。
以下代码可用于:
require(ggplot2)
dfA <- data.frame(x=rnorm(50000, mean=5), y=rnorm(50000, mean=5))
dfB <- data.frame(x=rnorm(30000, mean=25), y=rnorm(30000, mean=25))
ggplot() + theme_bw() +
geom_bin2d(data=dfA, aes(x=x, y=y), bins=100) +
scale_fill_gradient(low="white", high="red") +
geom_bin2d(data=dfB, aes(x=x, y=y), bins=100) +
scale_fill_gradient(low="white", high="blue")
这是结果图:
是否有一种方法可以指定两个不同的色阶,以使来自dfA的点和来自dfB的点具有两个不同的颜色渐变?
谢谢
答案 0 :(得分:1)
您可以先创建两个单独的图,然后为每个图获取基础的计算数据并合并它们:
# create separate plots
p1 <- ggplot() + theme_bw() +
geom_bin2d(data=dfA, aes(x=x, y=y), bins=100) +
scale_fill_gradient(low="white", high="red")
p2 <- ggplot() + theme_bw() +
geom_bin2d(data=dfB, aes(x=x, y=y), bins=100) +
scale_fill_gradient(low="white", high="blue")
# combined plot using layer_data() to extract data
# from each plot above, & scale_identity to use the
# already calculated fill values
p.combined <- ggplot(data = layer_data(p1),
aes(x = x, y = y, fill = fill)) +
geom_tile() +
geom_tile(data = layer_data(p2)) +
scale_fill_identity() +
theme_bw()
# optional: add legends to the combined plot
library(cowplot)
plot_grid(p.combined,
plot_grid(get_legend(p2),
get_legend(p1),
ncol = 1),
nrow = 1,
rel_widths = c(1, 0.1)) # optimal relative widths may change, depending on plot dimensions
答案 1 :(得分:0)
好吧,我发现我可以通过将optionslimits = c(min,max)传递给@ Z.Lin答案中的scale_fill_gradient函数来解决我的问题。