Почему последняя метка оси X опущена? - PullRequest
0 голосов
/ 04 мая 2018

В следующем примере последняя метка оси x ("4.0") опущена.

df <- data.frame(x = c(1, 2, 3.8), y = c(1, 2, 3))
#png(filename = "cutoff.png")
plot(df$x, df$y, xaxt = "n")
axis(side = 1, at = seq(0, 4, 0.5), labels = seq(0, 4, 0.5))
#dev.off()

Как предотвратить это поведение? enter image description here

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Как ответил @griffinevo (+1): если вы хотите, чтобы пределы оси были равны 4, вы должны указать это, используя xlim. Однако, вероятно, стоит объяснить, как рассчитываются пределы по умолчанию. Это объясняется в документации, но в немного непонятном месте. На странице справки ?par найдите xaxs. Там вы увидите

Стиль «r» (обычный) сначала расширяет диапазон данных на 4 процента конец, а затем находит ось с красивыми метками, которая помещается расширенный диапазон.

В вашем случае данные варьируются от 1 до 3,8. Так что сюжет будет искать красивые метки внутри диапазона

1 - 0.04*(3.8-1) = 0.888   
    to 
3.8 + 0.04*(3.8-1) = 3.912

4 находится вне этого диапазона и поэтому не будет отображаться как метка оси. Для полноты картины стоит отметить, что «довольно» звучит как просто слово, но на самом деле имеет здесь технический смысл - связанный с функцией pretty. Если вы посмотрите на страницу справки ?pretty Вы увидите описание:

Вычисляет последовательность из приблизительно n + 1 одинаково расположенных «круглых» значений, которые охватить диапазон значений в х. Значения выбираются так, чтобы они 1, 2 или 5 раз сила 10.

На странице справки есть дополнительная информация.

0 голосов
/ 04 мая 2018

Ваш предел оси не включает 4; вам нужно переписать пределы графика по умолчанию (которые он выводит из данных), используя xlim:

plot(df$x, df$y, xaxt = "n", xlim = c(1, 4))

enter image description here

Обратите внимание, что при использовании axis ваша спецификация at станет вашей labels, если вы не перезапишите это, поэтому ваш скрипт не должен указывать labels; Ваш сценарий может стать:

axis(side = 1, at = seq(0, 4, 0.5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...