图片中的R轴标签

10

我需要在呼叫中心根据空间位置绘制指标图表。
我用 R 写了一个小例子:

tt<-data.frame(a1=c(0.4,.5,.5,.7),a2=c(.5,.6,.7,.8), a3=c(.8,.7,.9,.8))
row.names(tt)<-paste("L", 1:4, sep='')
tt<-as.matrix(tt)
tt

所以我的矩阵是:

> tt
    a1  a2  a3
L1 0.4 0.5 0.8
L2 0.5 0.6 0.7
L3 0.5 0.7 0.9
L4 0.7 0.8 0.8
我尝试了:
palette <- colorRampPalette(c('#f0f3ff','#0033BB'))(256)
library(fields)
image.plot(t(tt[rev(order(row.names(tt))),]),col = palette, axes=F ,
       lab.breaks=NULL)

我必须转置和重新排序矩阵,因为我想要的是您在表格中读取它的方式。
所以我得到了: enter image description here 我需要在每个方块旁边添加行列名称。例如,左上角的方块应该在左侧显示“L1”,在顶部显示“a1”。
此外,我想在每个方块中添加值。
我尝试使用axis(),但结果不正确。我在R中做图方面相当新手,所以任何帮助都将不胜感激。
2个回答

10
axis命令似乎无法在图像外部绘制标签,即使使用outer参数也是如此。但是,如果在image.plot之后使用image函数(带有add=TRUE参数),它确实可以工作。
image.plot(t(tt[rev(order(row.names(tt))),]),col = palette, axes=FALSE, 
                                                          lab.breaks=NULL)

# axis labels
image(t(tt[rev(order(row.names(tt))),]), col = palette, axes=FALSE, add=TRUE)
axis(3, at=seq(0,1, length=3), labels=colnames(tt), lwd=0, pos=1.15)
axis(2, at=seq(1,0, length=4), labels=rownames(tt), lwd=0, pos=-0.25)

# add values
e <- expand.grid(seq(0,1, length=3), seq(1,0, length=4))
text(e, labels=t(tt))

enter image description here


聪明地扩展网格。我编写了一个愚蠢的函数,根据用户输入计算坐标。 - rawr

6

我认为你使用ggplot会更加开心——它能够使此类操作变得容易、减少出错率,并且绘图代码更加易读。因此,你需要将数据保留在dataframe中,并将其融合为“长格式”(这里我使用了reshape2包中的melt函数,但你也可以一开始就设置好dataframe的格式)。尝试以下代码:

library(ggplot2)
library(reshape2)

tt<-data.frame(a1=c(0.4,.5,.5,.7),a2=c(.5,.6,.7,.8), a3=c(.8,.7,.9,.8))
tt$row <- paste("L", 1:4, sep='')
tt_melt <- melt(tt)

ggplot(data=tt_melt,
       aes(x=variable, y=row, fill=value)) + geom_tile() + 
       geom_text(aes(label=value), color='white') + theme_bw()

输入图像描述

如果你愿意,ggplot也允许你控制颜色比例尺。 如果你要在R中绘图,花费几个小时学习ggplot是值得的!


谢谢,你知道怎么让坐标轴从左上角开始吗?因为我想让图表的显示方式与表格中的读取方式一致。 - GabyLP
您可以通过定义factor的顺序来更改顺序。您可以在ggplot调用之外执行此操作,或者将aes中的y =更改为y = factor(row, levels = paste0("L", 4:1)) - user20650

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