2013-10-15 5 views
1

У меня есть кадр mdata данных, которая имеет столбцы variable и value, что я Plotting на BoxPlot в R. Я Plotting log10 (значение) на Y-оси & переменные на X-оси. Я хочу изменить метки на оси Y так, чтобы они отображали исходные значения, а не log10 (значение).Изменение Boxplot оси этикетки

>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-ось, чтобы перейти от мин (mdata $ значения) до максимального (mdata $ значения) с интервалом 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)) 

Я попытался выяснить, что здесь проблема, но ее не очевидна. Любая помощь будет оценена по достоинству.

+0

сторона = 2 создайте ось Y. И я подумал бы, что было бы очень плохой идеей преобразовать data.frame в матрицу, когда у вас есть текстовые столбцы. –

+0

Извините, что я хотел создать ось Y, я отредактировал опечатку. –

+0

Возьмите 'as.matrix', тоже. –

ответ

3

Проблема заключается в том, что ваши ящики основаны на log10 от 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)) 

enter image description here

Выбор № 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)) 

enter image description here

Вы можете получить тики быть разнесены логарифмически или линейно с любым методом, указав параметр 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))) 
0

Try это (требуется несколько аннотаций, поэтому уменьшите интервал):

axis(side=2,labels=seq(min(mdata$value), max(mdata$value),1000), 
     at=log10(seq(min(mdata$value),max(mdata$value),by=1000))) 
Смежные вопросы