gpt4 book ai didi

r - 在 r、ggplot2、lattice 或latticeExtra 中创建更连续的调色板

转载 作者:行者123 更新时间:2023-12-02 22:04:03 25 4
gpt4 key购买 nike

警告...非常新手的问题如下:

我试图绘制数千个(X,Y)点的相当规则的分布,每个点与一个值相关联,我们称之为Z,它在-20到+20之间非常不规则地变化。我对平滑不感兴趣;我希望 Z 点值根据平滑变化的调色板进行绘制,就像 Gnuplot 使用适当的平滑调色板所做的那样。我已经尝试过基本 R、ggplot2 和latticeExtra,并且尽我所能,我可以想出以下几乎可以满足我想要的功能:

library(lattice)
library(latticeExtra)
library(colorRamps)
df = read.table(file"whatever", header=T)
levelplot(Z~X*Y, df, panel=panel.levelplot.points, cex=0.2,
col.regions=colorRampPalette(c("red","white","blue"))(50))

一个数据点如下所示:1302525 225167 -3.5

当我将最后一个代码行中的“50”绘制为 3 的数据帧时,我得到了红色、白色和蓝色的可预测 R 回收行为,重复五次,第 16 个颜色条段为白色。将 3 更改为 7 会导致更多的红色和蓝色色调,从而创建 2 个重复颜色范围段,并在颜色范围尝试回收时留下两种微红色。这表明增大该数字会导致颜色分级更精细。但如果我输入的数字大于 16,这就是我得到的全部,16 个彩色段,从红色、白色、蓝色均匀变化。但我希望色阶更精细,并且在完美的世界中,强制 Z 为零为白色。

到目前为止,我使用 R 的经验是,当我无法做如此简单的事情时,我错过了一个非常基本的概念。它是什么?

最佳答案

就晶格而言,您可以使用 RColorBrewer 设置调色板。 (甚至 colorspace )。使用 @Chase 提供的示例,但 z 为正值:

dat <- data.frame(x = rnorm(1000), y = rnorm(1000), z = sample(0:40, 1000, TRUE))
library(RColorBrewer)
# see, e.g.
# display.brewer.all(9, type="seq")
# display.brewer.pal(11, "RdBu")
my.col <- colorRampPalette(brewer.pal(11, "RdBu"))(diff(range(dat$z)))
xyplot(y ~ x, data=dat, col=my.col[dat$z], pch=19, alpha=.5)

请注意,这里还需要通过插值来增加可用颜色的范围。另外,使用 levelplot(),您可能想使用 cut=pretty=

enter image description here

关于r - 在 r、ggplot2、lattice 或latticeExtra 中创建更连续的调色板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181653/

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