【问题标题】:Change Boxplot Axis Labels更改箱线图轴标签
【发布时间】:2013-10-23 22:52:03
【问题描述】:

我有一个数据框mdata,其中包含我在 R 中的 BoxPlot 上绘制的列 variablevalue。我在 Y 轴上绘制 log10(value),在 X-轴上绘制变量轴。我想更改 Y 轴上的标签,使其显示原始值而不是 log10(值)。

>mdata

   ID          variable value
  SJ5444_MAXGT   coding 17455
  SJ5426_MAXGT   coding 17961
  HR1383_MAXGT   coding 17579
  HR5522_MAXGT   coding 17797
 CH30041_MAXGT   coding 20099
  SJ5438_MAXGT   coding 17467

我希望 Y 轴范围从 min(mdata$value) 到 max(mdata$value),间隔为 10000。但我无法这样做。

以下是我的代码:

boxplot(log10(as.numeric(value))~variable,data=mdata,yaxt="n",border="red",main="Boxplot: Seattle Seq Annotation")

axis(side=2,labels=seq(min(mdata$value),max(mdata$value),10000),cex.axis=0.65,tck=-0.02,at=seq(min(mdata$value),max(mdata$value),by=10000))

我试图找出这里的问题,但并不明显。任何帮助将不胜感激。

【问题讨论】:

  • side=2 创建 Y 轴。而且我认为当您有任何文本列时将 data.frame 转换为矩阵是一个非常糟糕的主意。
  • 对不起,我想创建 Y 轴,我已经编辑了错字。
  • as.matrix也拿出来。
  • 您忘记在at= 中记录值。快速查看的方法就是使用axis(2)

标签: r boxplot axis-labels


【解决方案1】:

问题似乎是您的箱线图基于valuelog10,而您绘制的轴使用原始值。有两种方法可以解决此问题。使用log10 生成轴刻度,或者在生成箱线图时使用log="y" 进行坐标转换。这是带有一些示例数据的插图:

set.seed(123)
x<-sample(100,1000,T)
var<-sample(letters[1:5],1000,T) 

选择1:

boxplot(log10(x) ~ var,yaxt="n")
axis(side=2,labels=round(10^(seq(log10(min(x)),log10(max(x)),len=5)),2),at=seq(log10(min(x)),log10(max(x)),len=5))

选择2:

boxplot(x ~ var,yaxt="n",log="y")
axis(side=2,labels=seq(min(x),max(x),len=5),at=seq(min(x),max(x),len=5))

您可以通过适当地指定at 参数使刻度以对数或线性方式间隔,例如,此命令将在log="y" 生成的图上放置均匀间隔的刻度线:

 axis(side=2,labels=round(exp(seq(log(min(x)),log(max(x)),len=5)),2),at=exp(seq(log(min(x)),log(max(x)),len=5)))

【讨论】:

    【解决方案2】:

    试试这个(需要多个注释,所以减少间隔):

    axis(side=2,labels=seq(min(mdata$value), max(mdata$value),1000),
             at=log10(seq(min(mdata$value),max(mdata$value),by=1000)))
    

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多