2011-12-31 2 views
10

Когда я вручную добавить следующие метки с (axis(1, at=1:27, labels=labs[0:27])):R Draw Всех меток осей (предотвратить некоторые из пропуска)

> labs[0:27] 
[1] "0\n9.3%" "1\n7.6%" "2\n5.6%" "3\n5.1%" "4\n5.7%" "5\n6.5%" "6\n7.3%" "7\n7.6%" "8\n7.5%" "9\n7%" "10\n6.2%" "11\n5.2%" 
[13] "12\n4.2%" ........ 

Я получаю следующее:

enter image description here

Как Я заставляю все ярлыки рисовать так, чтобы 1,3,5,6 и 11 не пропускались? (Также для дополнительного кредита, как я могу перенести все эту вниз несколько пикселей?)

+0

Вы действительно хотите включить 0 в свою индексацию? –

ответ

10

ось говорит вам, что:

код старается не привлекать перекрывающийся клещ метку, и так будет опустить метки, где они будут упираться или перекрывать ранее нарисованные метки. Это может привести, например, к маркировке каждого другого тика. (Клещей рисуются слева направо или снизу вверх, и пространство, по крайней мере, размером с «м» осталось между метками.)

Play с cex.axis так, чтобы метки достаточно мал, чтобы поместиться без перекрытия

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%", 
     "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",12:27) 
plot(1:27,xaxt = "n") 
axis(side=1, at=1:27, labels=labs[0:27],cex.axis=0.35) 

Если вы расширяете график (вручную, перетаскивая или программно), вы можете увеличить размер ваших меток.

+0

Большое спасибо. cex.axis очень помог –

2

@Papointe только что опубликовал то, что я собирался сказать, но опустил бонусный ответ.

Установите padj = 0.5 в axis, чтобы слегка переместить наклейки.

+2

Другой альтернативой является сделать метки перпендикулярными с '' 'plot (..., las = 2)' '' или '' 'par (las = 2); plot (...) '' ' – lukmdo

+0

+1 для предыдущего решения оси вращения. Обратите внимание на вышесказанное, если вы используете 'plot (..., axis = FALSE, ...)' и 'axis (1, ....)', затем добавьте опцию в ось: 'axis (1, ..., лас = 2) ' – r3x

14

Если вы действительно хотите, чтобы заставить все метки для отображения, даже если они очень близки или перекрываются, вы можете «трюк» R в отображении их, добавляя нечетные и четные метки осей с отдельными командами, а именно:

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%", 
     "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",13:27) 
n=length(labs) 
plot(1:28, xaxt = "n") 
axis(side=1, at=seq(1,n,2), labels=labs[seq(1,n,2)], cex.axis=0.6) 
axis(side=1, at=seq(2,n,2), labels=labs[seq(2,n,2)], cex.axis=0.6) 

enter image description here

вы можете играть с cex.axis, чтобы получить размер текста, который вы хотите. Обратите также внимание, что вам, возможно, придется настроить количество значений в at= и/или labels= так, чтобы они были равны.

Я согласен с @PLapointe и @joran в том, что обычно лучше не вмешиваться в поведение R по умолчанию в отношении перекрытия. Тем не менее, у меня было несколько случаев, когда метки осей выглядели прекрасно, даже когда они были не совсем полными «m-width» в отдельности, и я ударил по трюку чередующихся нечетных и даже ярлыков в качестве способа получить поведение I разыскивается.

3

Несмотря на то, что здесь есть некоторые хорошие ответы, ОП не хотел изменять размеры меток или ничего менять по поводу графика, кроме того, чтобы установить все метки осей. Это раздражает, так как часто кажется, что есть достаточно места для размещения всех меток оси.

Вот еще одно решение. Нарисуйте график без оси, затем добавьте тики с пустыми ярлыками. Сохраняйте позиции тиков в объекте, чтобы затем вы могли пройти каждый из них и поместить его в правильное положение на оси.

plot(1:10, 1:10, yaxt = "n") axis_ticks = axis(2, axTicks(2), labels = rep("", length(axTicks(2)))) for(i in axis_ticks) axis(2, i)

0

У меня была аналогичная проблема, когда я хотел шататься этикетки и заставить их печатать без потери некоторых. Я создал два набора тиков, показывающих второй набор ниже другого, чтобы он выглядел так, как будто он шатается.

xaxis_stagger = function(positions,labels) { 
    odd=labels[seq(1,length(labels),2)] 
    odd_pos=positions[seq(1,length(positions),2)] 
    even=labels[seq(2,length(labels),2)] 
    even_pos=positions[seq(2,length(positions),2)] 
    axis(side=1,at=odd_pos,labels=odd) 
    axis(side=1,at=even_pos,labels=even,padj=1.5) 
} 

Так вы даете позиции, где вы хотите тиканье быть и метки для этих клещей, и это будет затем реорганизовать его в двух наборах оси и сюжет их на оригинальный сюжет. Исходный сюжет будет выполнен с помощью xaxt = "n".

Смежные вопросы