0

我有一个包含连续变量 x、因子 y 和连续变量 z 的数据框

为了说明假设

x <- 1:5
y <- c("A", "B", "C", "D", "E")

z.a<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.b<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.c<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.d<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))
z.e<-sort(sample(x=seq(0,1,0.1),size=5, replace=F))

现在我想构建以下情节

plot(x,y, yaxt="n", type="n",ylim=c(0,5),yaxs="i")
axis(2, at=seq(0.5,4.5,1), labels=c("A", "B", "C", "D", "E"))
abline(h=0:5)

在此处输入图像描述

现在对于y(显示在 y 轴上)的每个级别,我希望框根据各自的 z 值填充颜色。例如A情节的 the 应该用z.a, the Bwithz.b

z包含相同比例(0,1)的值,并且总是随着减少而减少x

有没有执行这些情节的包?如果没有,我该如何在base R中编码?

我更喜欢基本的 R 解决方案,但如果不可能,任何其他解决方案都可以。

或者,该图可以被视为 y 的每个级别的水平条形图,范围为 x 的整个范围,其颜色将归因于 z(在每个 x 处)

4

1 回答 1

1

这是使用ggplot2库的解决方案。

首先,将所有数据放入一个数据框中。

df<-data.frame(x = rep(1:5,times=5),
               y = rep(c("A", "B", "C", "D", "E"),each=5),
               z= c(sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F)),
                    sort(sample(x=seq(0,1,0.1),size=5, replace=F))))

然后用于根据值geom_tile()获取每个级别的颜色。yz

library(ggplot2)
ggplot(df,aes(x=x,y=y,fill=z))+geom_tile()+
  scale_x_continuous(expand = c(0, 0)) + scale_y_discrete(expand = c(0, 0))

在此处输入图像描述

更新 - 使用功能图像的解决方案

image()通过基础系统的功能可以得到类似的结果。

首先,z使用 function 将所有值放在一个数据框中cbind()。还制作了新的 x 和 y 值。

z2<-cbind(z.a,z.b,z.c,z.d,z.e)
x2<-1:5
y2<-1:5

使用函数绘制zimage()。然后用函数添加轴axis()image.plot()使用从库中显示图例函数fields。在这两个功能中,col=应使用相同的设置。image.plot()可以生成整个图,但此功能不允许正确修改轴。

par(mar=c(5,5,5,8)) #sets space for legend on right side
image(x2,y2,z2,axes=F,col=rainbow(10))
axis(1,at=1:5)
axis(2,at=1:5,labels=c("A", "B", "C", "D", "E"))
box()
library(fields)
image.plot(x2,y2,z2,legend.only=T,col=rainbow(10))

在此处输入图像描述

于 2013-01-16T18:35:00.867 回答