gpt4 book ai didi

r - 如何将单个 scale_color* 的不同方面映射到 ggplot2 中的不同变量?

转载 作者:行者123 更新时间:2023-12-01 23:54:35 31 4
gpt4 key购买 nike

我想同时可视化空间数据中预测的均值和误差(方差)。一种可能的方法是将均值映射到色调,将误差映射到饱和度或亮度。尽管我在 map 中这样做,但我将在这里提供一个更简单的最小工作示例,该示例改编自 ggplot2 的文档。

library(ggplot2)
library(RColorBrewer)
dsub <- subset(diamonds, x > 5 & x < 6 & y > 5 & y < 6)
dsub$var <- dsub$x
dsub$diff <- with(dsub, sqrt(abs(x-y))* sign(x-y))
d <- qplot(x, y, data=dsub, colour=diff)
d + scale_color_gradientn(colours=brewer.pal(7,"YlOrRd"))

One variable mapped to color

我想看到的是一个版本,而不是附加的图,是将色带的亮度或饱和度映射到数据中的变量“var”的版本。理想情况下,这样的情节将包括一个二维图例。

最佳答案

对我有用的一个解决方案是使用几个图层来表示数据(在这个例子中,我或多或少地使用色调和值作为两种美学,但饱和度可以通过将黑色图层切换为白色来代替值),然后生成自定义 2D 图例。因此,使用您提供的数据:

# main plot
main <- ggplot(dsub) +
geom_tile(aes(x, y, fill=diff)) +
scale_fill_gradient(high="red", low="blue") +
geom_tile(aes(x, y, alpha=var)) +
theme(legend.position="none")

# 2d legend
diff <- range(dsub$diff)
var <- range(dsub$var)
legdata <- expand.grid(diff=seq(diff[1], diff[2], (diff[2]-diff[1])/20),
var=seq(var[1], var[2], (var[2]-var[1])/20))
legend <- ggplot(legdata) +
geom_tile(aes(diff, var, fill=diff)) +
scale_fill_gradient(high="red", low="blue") +
geom_tile(aes(diff, var, alpha=var)) +
scale_x_continuous(expand=c(0,0)) +
scale_y_continuous(expand=c(0,0)) +
theme(panel.background=element_blank(), panel.grid=element_blank(),
legend.position="none") +
coord_fixed() +
labs(title="legend")

# combine plot and legend
library(gridExtra)
plt <- arrangeGrob(main, legend, nrow=1, widths=c(3, 1))
print(plt)

enter image description here

关于r - 如何将单个 scale_color* 的不同方面映射到 ggplot2 中的不同变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24795878/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com