2

我有一个mdata包含列的数据框,variable并且value我在 R 中的 BoxPlot 上绘图。我在 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))

我试图弄清楚这里的问题是什么,但并不明显。任何帮助,将不胜感激。

4

2 回答 2

4

问题似乎是您的箱线图基于log10of value,而您绘制的轴使用原始值。有两种方法可以解决此问题。用于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)))
于 2013-10-16T00:04:43.317 回答
0

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

axis(side=2,labels=seq(min(mdata$value), max(mdata$value),1000),
         at=log10(seq(min(mdata$value),max(mdata$value),by=1000)))
于 2013-10-16T00:11:48.357 回答