【问题标题】:r- axis label in image图像中的 r 轴标签
【发布时间】:2014-12-10 16:51:08
【问题描述】:

我需要在呼叫中心按空间位置绘制指标。 我在 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)

我必须对矩阵进行转置和重新排序,因为我想要你在表格中读取它的方式。

所以我得到了:

我需要在每个方块旁边添加行名和列名。例如,左上角的正方形应在左侧有“L1”,在顶部有“a1”。

我还想在每个方块中添加值。

我尝试了axis(),但得到了错误的结果。我是在 R 中做图表的新手,所以任何帮助都将不胜感激。

【问题讨论】:

    标签: r image label axis


    【解决方案1】:

    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))
    

    【讨论】:

    • 在扩展网格上很聪明。我写了一个愚蠢的函数来计算基于 usr 的坐标
    【解决方案2】:

    我认为使用 ggplot 会让你更开心——它使这类事情变得简单,更不容易出错,并且绘图代码更具可读性。为此,您需要将数据保存在数据框中,并将其融化为“长形式”(这里我使用 reshape2 包中的融化,但您也可以将数据框设置为这种形式以开始)。试试这个:

    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!

    【讨论】:

    • 谢谢,你知道我怎样才能让轴从左上角开始吗?因为我想要你在表格中读到的图表。
    • 您可以通过factor 定义订单来更改订单。您可以在ggplot 调用之外执行此操作,也可以将aes 中的y= 更改为y=factor(row, levels=paste0("L", 4:1))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    相关资源
    最近更新 更多