R-带图例的z值彩色散点图点
我有一个散点图,希望通过分配给每个点的R-带图例的z值彩色散点图点,r,R,我有一个散点图,希望通过分配给每个点的z值为点上色。然后我想得到绘图右侧的图例,以显示哪些颜色对应于z值,并使用平滑的颜色光谱 以下是一些可以使用的x,y,z值,因此这是一个可重复的示例 x = runif(50) y = runif(50) z = runif(50) #determines color of the (x,y) point 我想最好的答案应该是对任何颜色函数进行推广,但我确实希望使用从 如果您不想使用ggplot2,我修改了其他人提供的解决方案,我不记得是谁 scatter
z
值为点上色。然后我想得到绘图右侧的图例,以显示哪些颜色对应于z
值,并使用平滑的颜色光谱
以下是一些可以使用的x,y,z
值,因此这是一个可重复的示例
x = runif(50)
y = runif(50)
z = runif(50) #determines color of the (x,y) point
我想最好的答案应该是对任何颜色函数进行推广,但我确实希望使用从
如果您不想使用ggplot2,我修改了其他人提供的解决方案,我不记得是谁
scatter_fill <- function (x, y, z,xlim=c(min(x),max(x)),ylim=c(min(y),max(y)),zlim=c(min(z),max(z)),
nlevels = 20, plot.title, plot.axes,
key.title, key.axes, asp = NA, xaxs = "i",
yaxs = "i", las = 1,
axes = TRUE, frame.plot = axes, ...)
{
mar.orig <- (par.orig <- par(c("mar", "las", "mfrow")))$mar
on.exit(par(par.orig))
w <- (3 + mar.orig[2L]) * par("csi") * 2.54
layout(matrix(c(2, 1), ncol = 2L), widths = c(1, lcm(w)))
par(las = las)
mar <- mar.orig
mar[4L] <- mar[2L]
mar[2L] <- 1
par(mar = mar)
# choose colors to interpolate
levels <- seq(zlim[1],zlim[2],length.out = nlevels)
col <- colorRampPalette(c("red","yellow","dark green"))(nlevels)
colz <- col[cut(z,nlevels)]
#
plot.new()
plot.window(xlim = c(0, 1), ylim = range(levels), xaxs = "i", yaxs = "i")
rect(0, levels[-length(levels)], 1, levels[-1L],col=col,border=col)
if (missing(key.axes)) {if (axes){axis(4)}}
else key.axes
box()
if (!missing(key.title))
key.title
mar <- mar.orig
mar[4L] <- 1
par(mar = mar)
# points
plot(x,y,type = "n",xaxt='n',yaxt='n',xlab="",ylab="",xlim=xlim,ylim=ylim,bty="n")
points(x,y,col = colz,xaxt='n',yaxt='n',xlab="",ylab="",bty="n",...)
## options to make mapping more customizable
if (missing(plot.axes)) {
if (axes) {
title(main = "", xlab = "", ylab = "")
Axis(x, side = 1)
Axis(y, side = 2)
}
}
else plot.axes
if (frame.plot)
box()
if (missing(plot.title))
title(...)
else plot.title
invisible()
}
scatter\u fill另一种选择是使用包装latticeeextra
中的levelplot
,使用三种不同的调色板
library(latticeExtra)
levelplot(z ~ x + y, panel = panel.levelplot.points, col.regions = heat.colors(50))
levelplot(z ~ x + y, panel = panel.levelplot.points,
col.regions =colorRampPalette(brewer.pal(11,"RdYlGn"))(50))
levelplot(z ~ x + y, panel = panel.levelplot.points, col.regions = rainbow(50))
如何将其移动到堆栈溢出?我发现了一个类似的问题,我能够重现答案,它看起来非常漂亮。看看。我们已经为你迁移了它,@StanLe。您可以签出链接的线程。GL.你能修改一下吗,这样我就可以设置zlim了?当我运行你的代码时,我得到了:scatter_fill中的错误(allX,allY,allZ,nlevels=15,main=“TEST”,pch=“”,:尝试应用非函数您是否事先运行了District_fill函数?必须先将其加载到工作区中,然后才能使用它。是的,我将所有代码都粘贴在同一个文件中。与上面列出的完全相同。我甚至添加了一个rm(list=ls(all=T))在最顶端。似乎是代码中的一个错误。这个错误意味着什么?有什么想法吗?有效!除了…添加一个xlim、ylim和zlim参数怎么样?你能添加吗?
# random vectors
vx <- rnorm(40,0,1)
vy <- rnorm(40,0,1)
vz <- rnorm(40,10,10)
scatter_fill(vx,vy,vz,nlevels=15,xlim=c(-1,1),ylim=c(-1,5),zlim=c(-10,10),main="TEST",pch=".",cex=8)
library(latticeExtra)
levelplot(z ~ x + y, panel = panel.levelplot.points, col.regions = heat.colors(50))
levelplot(z ~ x + y, panel = panel.levelplot.points,
col.regions =colorRampPalette(brewer.pal(11,"RdYlGn"))(50))
levelplot(z ~ x + y, panel = panel.levelplot.points, col.regions = rainbow(50))