Как я могу иметь полный диапазон меток по осям x и y на графике?

У меня есть две переменные, x и y

x = runif(8, 0, runif(1, 1, 5))
y = x^2

что я хочу построить. Обратите внимание, что диапазон x (и, следовательно, y=x^2) не всегда одинаков.

Итак, команда

plot(x, y, pch=19, col='red')

производит

введите здесь описание изображения

Однако мне не нужны границы вокруг графика, поэтому я использую параметр bty='n' для графика:

plot(x, y, pch=19, col='red', bty='n')

который производит

введите здесь описание изображения

Это немного прискорбно, имхо, так как я бы хотел, чтобы ось Y прошла весь путь до 4, а ось X - до 2.

Итак, я использую параметры xaxp и yaxp в команде plot:

plot(x, y, pch=19, col='red', bty='n', 
     xaxp=c(
       floor  (min(x)),
       ceiling(max(x)),
       5
    ),
    yaxp=c(
       floor  (min(y)),
       ceiling(max(y)),
       5
    )
)

который создает введите здесь описание изображения

Это немного лучше, но все еще не показывает весь диапазон. Кроме того, я подумал, что хорошо, что маркировка осей по умолчанию использует шаги, подобные 1,2,3,4 или 0.5,1,1.5,2, а не просто какие-то произвольные дроби.

Я предполагаю, что у R есть какой-то параметр или механизм для построения полного диапазона по оси «человеческим» способом (0,5,1,1,5...), но я его не нашел. Итак, что я мог попробовать?


person René Nyffenegger    schedule 14.07.2015    source источник
comment
Вы можете включить axes=FALSE' в начальный вызов plot(), а затем использовать axis() для создания пользовательских осей с отметками и метками, где вам нравится использовать «at», например, at=seq(0, 2, 0,5) для вашей оси.   -  person ulfelder    schedule 14.07.2015
comment
В качестве примечания: всегда устанавливайте начальное число перед генерацией случайных чисел (например, set.seed(1)), чтобы другие могли полностью воспроизвести ваш вывод.   -  person lukeA    schedule 14.07.2015
comment
@lukeA спасибо, я постараюсь стать лучше в будущем.   -  person René Nyffenegger    schedule 14.07.2015


Ответы (1)


Пытаться:

plot(x, y, pch=19, col='red', bty='n', xlim=c(min(x),max(x)),
  ylim=c(min(y),max(y)), axes=FALSE)
axis(1, at=seq(floor(min(x)), ceiling(max(x)), 0.5))
axis(2, at=seq(floor(min(y)), ceiling(max(y)), 0.5))

Или, если вы предпочитаете жестко закодировать эти диапазоны осей:

axis(1, at=seq(0, 2, 0.5))
axis(2, at=seq(0, 4, 0.5))

Это то, чего вы добивались?

person ulfelder    schedule 14.07.2015
comment
axis(1, at=seq(floor(min(x)), ceiling(max(x)), 0.5)) и axis(2, at=seq(floor(min(y)), ceiling(max(y)), 0.5)) кажутся даже немного лучше - person René Nyffenegger; 14.07.2015
comment
Ах, да, я отредактирую ответ, чтобы включить это. - person ulfelder; 14.07.2015