gpt4 book ai didi

r - ggplot将颜色渐变缩放到数据范围之外的范围

转载 作者:行者123 更新时间:2023-12-02 17:42:14 28 4
gpt4 key购买 nike

我正在寻找一种方法来拉伸(stretch)两个值之间的颜色渐变并标记图例,无论数据集中的数据值范围如何。本质上,是否存在与颜色渐变的 ylim() 等效的功能?

给定绘制通常在 -1 和 1 之间的 z 值的代码,如果中断在数据范围内,我可以绘制并标记渐变:

library(ggplot2)

#generator from http://docs.ggplot2.org/current/geom_tile.html
pp <- function (n, r = 4) {
x <- seq(-r * pi, r * pi, len = n)
df <- expand.grid(x = x, y = x)
df$r <- sqrt(df$x^2 + df$y^2)
df$z <- cos(df$r^2) * exp(-df$r / 6)
return(df)
}

t <- pp(30)
summary(t)
b <- c(-.5, 0, .5)
colors <- c('navyblue', 'darkmagenta', 'darkorange1')
p <- ggplot(data = t, aes(x = x, y = y))+
geom_tile(aes(fill = z))+
scale_fill_gradientn(colors = colors, breaks = b, labels = format(b))
ggsave(plot = p, filename = <somefile.png>, height = 3, width = 4)

graham jeffries ggplot scale fill example

但是当我将中断更改为观察范围之外的值时,渐变着色似乎没有调整,并且渐变标签也没有出现。

b <- c(-3, 0, 3)

graham jeffries ggplot scale fill example 2

最佳答案

记住这一点非常重要,在 ggplot 中,breaks 基本上永远不会改变比例本身。它只会更改指南或图例中显示的内容。

您应该更改比例限制:

ggplot(data=t, aes(x=x, y=y)) +
geom_tile(aes(fill=z)) +
scale_fill_gradientn(limits = c(-3,3),
colours=c("navyblue", "darkmagenta", "darkorange1"),
breaks=b, labels=format(b))

现在,如果您希望图例中出现的中断进一步延伸,您可以更改它们以设置刻度线出现的位置。

要记住的一个很好的类比始终是规则的 x 和 y 轴。在那里设置“中断”只会改变刻度线出现的位置。如果您想更改 x 或 y 轴的范围,通常会更改“限制”等设置。

关于r - ggplot将颜色渐变缩放到数据范围之外的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888222/

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