在R中绘图时如何使颜色平滑变化
how to make colors change smoothly when plotting in R
ENV
R 3.3.1
小数据
rdn<-c(0.8,1.8,2.8)
tdn<-c(1,2,3,4,5,6,7,8,9)
idn<-matrix(c(0.3, 0.3, 0.3, 0.2, 0.2, 0.4, 0.1, 0.1, 0.5, 0, 0.2, 0.5, 0, 0.3, 0.6, 0, 0.4, 0.6, 0, 0.4, 0.6, 0, 0.5, 0.7, 0, 0.5, 0.7), nrow=9, ncol=3, byrow=T)
我现在拥有的:
代码
filled.contour(tdn, rdn, idn,
color.palette=colorRampPalette(c("blue","yellow","red")),
plot.title=title(main="Detail", sub="detail",
xlab="t", ylab="lambda"),
plot.axes = { axis(side = 1, at = tdn, labels = tdn)
axis(side = 2, at = rdn, labels = rdn) },
key.title=title(main="ratio"),
key.axes = axis(4, seq(0, 1, by = 0.1)))
当前结果
问题
颜色范围不是我想要的。颜色之间存在边界,因此颜色不会从深蓝色平滑地变为深红色。
预计
问题
在 R 中绘图时,如何使颜色像我的 Expeced 图那样平滑变化?如何消除上述问题? rainbow
也不适合我。谢谢。
编辑
遵循 Haboryme 的解决方案
前景没有消失。
不幸的是,filled.contour
...
固定了图和键之间 levels/colours 的数量,因此用 nlevels
参数(和 col
而不是 color.palette
)进行试验结果在一个奇怪的输出中(更平滑的图像,但不可读的键)。
另外,轮廓线不能修改。因此,增加到 200 级(在您的示例中从最初的 14 级)仍然是 'readable',但是更高的值会产生不需要的 side-effects。
示例:
n <- 200
filled.contour(tdn, rdn, idn,
col=colorRampPalette(c("blue","yellow","red"))(n),
levels = seq(0,1,length.out = n),
plot.title=title(main="Detail", sub="detail",
xlab="t", ylab="lambda"),
plot.axes = { axis(side = 1, at = tdn, labels = tdn)
axis(side = 2, at = rdn, labels = rdn) },
key.title=title(main="ratio"),
key.axes = axis(4, seq(0, 1, by = 0.1)))
输出:
也许尝试 lattice::levelplot
可以解决问题。至少对于图例颜色键,更高的级别不会打扰。但是图片不是'smoothed'.
示例:
library(lattice)
levelplot(idn, row.values = tdn, column.values = rdn, cuts = n, col.regions = colorRampPalette(c("blue","yellow","red"))(n))
输出:
接近@setempler 的答案,但您可能会发现它更接近您的预期输出:
par(fg = NA,col="black")
filled.contour(x=tdn,
y=rdn,
z=idn,
color.palette=colorRampPalette(c("blue","yellow","red")),
plot.title=title(main="Detail", sub="detail",
xlab="t", ylab="lambda"),
nlevels=200,
plot.axes = { axis(side = 1, at = tdn, labels = tdn)
axis(side = 2, at = rdn, labels = rdn) },
key.title=title(main="ratio"),
key.axes = axis(4, seq(0, 1, by = 0.1)))
ENV
R 3.3.1
小数据
rdn<-c(0.8,1.8,2.8)
tdn<-c(1,2,3,4,5,6,7,8,9)
idn<-matrix(c(0.3, 0.3, 0.3, 0.2, 0.2, 0.4, 0.1, 0.1, 0.5, 0, 0.2, 0.5, 0, 0.3, 0.6, 0, 0.4, 0.6, 0, 0.4, 0.6, 0, 0.5, 0.7, 0, 0.5, 0.7), nrow=9, ncol=3, byrow=T)
我现在拥有的:
代码
filled.contour(tdn, rdn, idn,
color.palette=colorRampPalette(c("blue","yellow","red")),
plot.title=title(main="Detail", sub="detail",
xlab="t", ylab="lambda"),
plot.axes = { axis(side = 1, at = tdn, labels = tdn)
axis(side = 2, at = rdn, labels = rdn) },
key.title=title(main="ratio"),
key.axes = axis(4, seq(0, 1, by = 0.1)))
当前结果
问题
颜色范围不是我想要的。颜色之间存在边界,因此颜色不会从深蓝色平滑地变为深红色。
预计
问题
在 R 中绘图时,如何使颜色像我的 Expeced 图那样平滑变化?如何消除上述问题? rainbow
也不适合我。谢谢。
编辑
遵循 Haboryme 的解决方案
前景没有消失。
不幸的是,filled.contour
...
固定了图和键之间 levels/colours 的数量,因此用
nlevels
参数(和col
而不是color.palette
)进行试验结果在一个奇怪的输出中(更平滑的图像,但不可读的键)。另外,轮廓线不能修改。因此,增加到 200 级(在您的示例中从最初的 14 级)仍然是 'readable',但是更高的值会产生不需要的 side-effects。
示例:
n <- 200
filled.contour(tdn, rdn, idn,
col=colorRampPalette(c("blue","yellow","red"))(n),
levels = seq(0,1,length.out = n),
plot.title=title(main="Detail", sub="detail",
xlab="t", ylab="lambda"),
plot.axes = { axis(side = 1, at = tdn, labels = tdn)
axis(side = 2, at = rdn, labels = rdn) },
key.title=title(main="ratio"),
key.axes = axis(4, seq(0, 1, by = 0.1)))
输出:
也许尝试 lattice::levelplot
可以解决问题。至少对于图例颜色键,更高的级别不会打扰。但是图片不是'smoothed'.
示例:
library(lattice)
levelplot(idn, row.values = tdn, column.values = rdn, cuts = n, col.regions = colorRampPalette(c("blue","yellow","red"))(n))
输出:
接近@setempler 的答案,但您可能会发现它更接近您的预期输出:
par(fg = NA,col="black")
filled.contour(x=tdn,
y=rdn,
z=idn,
color.palette=colorRampPalette(c("blue","yellow","red")),
plot.title=title(main="Detail", sub="detail",
xlab="t", ylab="lambda"),
nlevels=200,
plot.axes = { axis(side = 1, at = tdn, labels = tdn)
axis(side = 2, at = rdn, labels = rdn) },
key.title=title(main="ratio"),
key.axes = axis(4, seq(0, 1, by = 0.1)))