Как написать метки в барплоте по оси X с дублированными именами? - PullRequest
12 голосов
/ 28 сентября 2011

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

x <- c(1.8405917,0.3265986,1.5723623,464.7370299,0.0000000,3.2235716,
       3.1223534, 7.0999787, 1.7122258,3.2005524,3.7531266,469.4436828)

и я использую барплот

barplot(x,xlab=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC",
                 "CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"))

Но это не работает. Я также использовал

axis()

Но это также не работает.

Заранее спасибо.

Ответы [ 4 ]

21 голосов
/ 28 сентября 2011

Нет, xlab - для предоставления метки для всей оси x графика, а не для маркировки отдельных баров.

barplot() берет метки для баров из названийпостроенный вектор (или что-то, что может быть выведено в набор имен).

> names(x) <- c("AA/AA", "AA/CC", "AA/AC", "AA/NC", "CC/AA", "CC/CC", "CC/AC",
+               "CC/NC", "AC/AA", "AC/CC", "AC/AC", "AC/NC")
> barplot(x)
> ## or with labels rotated, see ?par
> barplot(x, las = 2)

Edit: Как упоминает @Aaron, barplot() также имеет names.arg для предоставленияэтикетки для баров.Это то, что ?barplot должен сказать:

names.arg: вектор имен, который будет нанесен под каждый столбец или группу столбцов.Если этот аргумент опущен, то имена берутся из атрибута names height, если это вектор, или имен столбцов, если это матрица.

Что объясняет значение по умолчаниюповедение, если names.arg не предоставлено - то есть взять имена из нанесенного объекта.Какое использование наиболее полезно для вас, в основном, зависит от вкуса.Отсутствие строки / столбца / имен может немного ускорить код, но многие функции R будут брать атрибут names (или аналогичный, например, имена строк) непосредственно из объектов, поэтому вам не нужно будет предоставлять метки для построения /маркировка результатов и т. д.

11 голосов
/ 28 сентября 2011

xlab должно быть names.arg.Подробнее см. ?barplot.

3 голосов
/ 28 сентября 2011

Попробуйте это:

barplot(x, cex.names=0.7,
        names.arg=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC",
                    "CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"))
3 голосов
/ 28 сентября 2011

Способ использования axis() заключается в захвате средних точек, которые возвращает функция barplot.См ?barplot:

 mids <- barplot(x, xlab="")

 axis(1, at=mids, labels=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC",
                           "CC/AC","CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"), 
      las=3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...