给绘图添加一个连续的色彩渐变图例条

4

我正在使用以下数据和代码来绘制一个条形图:

ddf=structure(list(VAR = structure(1:9, .Label = c("aaa", "bbb", 
"ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii"), class = "factor"), 
    VAL = c(0L, 32L, 64L, 96L, 128L, 160L, 192L, 224L, 256L)), .Names = c("VAR", 
"VAL"), class = "data.frame", row.names = c(NA, -9L))

barplot(ddf$VAL,col=rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256))

我该如何添加一个图例条,上面有对应值的这些颜色?我想要一个像下面这个图中出现的图例条:
library(latticeExtra)
dat <- data.frame(x = rnorm(1000), y = rnorm(1000), z = rnorm(1000, mean = 1))
maxz <- max(abs(dat$z))
levelplot(z ~ x * y, dat, at = seq(-maxz, maxz, length = 100), panel = panel.levelplot.points, par.settings = custom.theme.2())

我尝试使用以下函数示例,但无法根据我的需求修改它们:

legend("bottom", legend = LETTERS[1:6], col = c6, ncol = 2, cex = 2, lwd = 3, text.font = i, text.col = c6)

libarary(plotrix)
testcol<-color.gradient(c(0,1),0,c(1,0),nslices=5)
color.legend(11,6,11.8,9,col.labels,testcol,gradient="y")

感谢您提前阅读。
3个回答

14

关键是在单独的面板中将色彩键绘制为图像。注意,我通过减少par(mar=...)之间的边距来增加面板之间的外边距,并在两个面板周围添加外边距par(oma=...)

my.palette <- rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256)

# Create two panels side by side
layout(t(1:2), widths=c(5,1))

# Set margins and turn all axis labels horizontally (with `las=1`)
par(mar=rep(.5, 4), oma=rep(3, 4), las=1)

barplot(ddf$VAL,col=my.palette)

# Draw the color legend
image(1, ddf$VAL, t(seq_along(ddf$VAL)), col=my.palette, axes=FALSE)
axis(4)

enter image description here


谢谢。我正想找这样的东西。我们能把它的宽度和高度缩小一点吗? - rnso
我可以通过widths=c(5,0.5))来减小宽度,但如何减小高度? - rnso
2
为了让它更短,您可以在调用“image”之前使用“par(mar=c(4,1,4,1))”添加一些额外的边距。 - Backlin
是的,它有效。谢谢。我原本期望使用图例或color.legend函数来解决问题。 - rnso

3

为了完整起见,这里提供一份 color.legend 的版本,因为我认为它是最简单的:

您的数据:

ddf=structure(list(VAR = structure(1:9, .Label = c("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii"), class = "factor"),                       VAL = c(0L, 32L, 64L, 96L, 128L, 160L, 192L, 224L, 256L)), .Names = ("VAR","VAL"), class = "data.frame", row.names = c(NA, -9L))

现在我们用图例绘制条形图。数字是图例边距(x1,y1,x2,y2)

par(mar=c(1,3,1,5)+0.1,xpd=TRUE)
col.pal<-rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256)
barplot(ddf$VAL,col=rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256))
color.legend(12,220,13,80,rev(ddf$VAL),rev(col.pal),gradient="y")

your colorful barplot


这个是从 plotrix 软件包中来的吗? - n.caillou

1

或者,您可以使用plotrix包中的colors.scale,并将其添加到标准legend中。这正是(我){{link1:spatDataManagement}}包中的plotZCol函数所做的。

从例子中:

x <- rnorm(1000)
y <- rnorm(1000)
library("spatDataManagement")

plotZCol(x,y,zCol=x+y)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接