2012-05-29 5 views
2

Я хочу сделать простой бар сюжет, как так:Довольно оси с Min и Max этикетки

test <- data.frame(y=c(1,3,53,10,30,35,50), x=c(1:7)) 
barplot(test$y, names.arg=test$x) 

resulting graph

Моя проблема заключается в том, что ось у не распространяется достаточно далеко, если максимальное значение некоторое «нечеткое» число. Было бы лучше, если бы расширенная ось прошла максимальное значение и заканчивалась на некотором «симпатичном» значении больше максимального.

Учитывая случайный набор данных (т. Е. Это происходит в функции), есть ли простой способ сделать это?

+0

Я бы использовал 'ggplot' для этого. Вам нужно решение в базе R? ** Редактировать ** - это тоже нелегко в 'ggplot', хотя' ggplot' рисует линию сетки над самым высоким баром, что делает его довольно простым для чтения значения. – Andrie

+0

Мне все равно нужно решение в базе R, так как я включаю его в свою собственную функцию, которая рисует этот график как часть визуализации. – MattLBeck

ответ

6

Вы можете использовать комбинацию pretty() и range() автоматически выбрать более хорошие настройки для ylim:

test <- data.frame(y=c(1,3,53,10,30,35,50), x=c(1:7)) 
barplot(test$y, names.arg=test$x, 
     ylim = range(pretty(c(0, test$y)))) 

enter image description here

(Благодаря Gavin Simpson за указание на то, что range(pretty(c(0, test$y))) работает точно так же, как range(pretty(c(0, max(test$y))))

+0

+1 Хороший ответ. – Andrie

+0

Это красиво! Теперь сделайте один и тот же график, но используя 'x11 (width = 5, height = 2.2)' в качестве устройства вывода. Почему он печатает этикетку «50», а не этикетку «60»? – MattLBeck

+1

В этом случае 'pretty (test $ y)' достаточно - вызов 'max()' не требуется. –