Переключение значений X и Y на графике в R (также с изменением осей данных) - PullRequest
3 голосов
/ 15 ноября 2011

Как построить график в R, чтобы значение переменной отображалось вдоль оси X, а имена переменных располагались вертикально вдоль оси Y? В конечном итоге график должен выглядеть вертикально с именами переменных на оси Y и значениями на оси X.

Код ниже, якобы, сделает это, но проблема в том, что на самом деле значения графика не совпадают с осями. Это означает, что график по-прежнему строится так, как будто имена расположены вдоль оси X, а значения - вдоль оси Y.

переменные ниже:

значение = вектор-столбец чисел

имя = столбец имен, которые соответствуют каждому числу

plot(value, axes=F, xlab="", ylab= "", type= "b", xlim=c(-5, 50), ylim=c(0, 8))
axis(1)
axis(2, at = 1:length(name), labels = name, las=1, pos=-3.0,cex.axis=.65 )

спасибо!

Ответы [ 3 ]

6 голосов
/ 15 ноября 2011

Для легкой гибкости в этом отношении мне нравятся функции построения графиков в пакете lattice:

 library(lattice)

 # First make some example data
 df <- data.frame(name=rep(c("a", "b", "c"), each=5), value=rnorm(15))

 # Then try plotting it in both 'orientations'
 # ... as a dotplot
 xyplot(value~name, data=df)
 xyplot(name~value, data=df)

 # ... or perhaps as a 'box-and-whisker' plot
 bwplot(value~name, data=df)
 bwplot(name~value, data=df)

Если вам нужно, вы также можете построить это с помощью base graphics, хотя вынадо немного поработать над метками оси:

plot(x=df$value, y=df$name, yaxt="n",
     xlab="value", ylab="name")
axis(2, at=1:3, labels=levels(df$name), las=1)
5 голосов
/ 15 ноября 2011

Как только вы используете базовую функцию plot, пользовательские координаты фиксируются. Это как писать чернилами. Там нет возможности позже перевернуть их с вызовом оси. Такая гимнастика потребует более объектно-ориентированного подхода, такого как система решеток или ggplot. Они позволяют создавать объект, который может быть обновлен или изменен. Если у вас есть объект ggplot, вы можете сделать что-то вроде:

 p + coord_flip()
3 голосов
/ 15 ноября 2011

Вы только что получили два приличных предложения по использованию других библиотек печати. Я считаю, что ваша настоящая проблема заключается в том, что вы передаете только один вектор значений в plot, который вы намерены использовать в качестве x значений. Но когда передан один вектор, plot предполагает, что вы дали ему y значения. Просто сделайте что-то вроде:

plot(x = value, y = 1:length(name),...)

и ты должен получить то, что хочешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...