Вращение меток оси x в R для гистограммы

Я пытаюсь повернуть метки оси x на 45 градусов на графике, но безуспешно. Это код, который у меня ниже:

barplot(((data1[,1] - average)/average) * 100,
        srt       = 45,
        adj       = 1,
        xpd       = TRUE,
        names.arg = data1[,2],
        col       = c("#3CA0D0"),
        main      = "Best Lift Time to Vertical Drop Ratios of North American Resorts",
        ylab      = "Normalized Difference",
        yaxt      = 'n',
        cex.names = 0.65,
        cex.lab   = 0.65)

person David    schedule 23.04.2012    source источник


Ответы (8)


ОТРЕДАКТИВНЫЙ ОТВЕТ НА ОТВЕТ ДЭВИДА:

Вот такой хакерский способ. Думаю, есть способ попроще. Но вы можете подавить метки столбцов и текст на графике меток, сохранив положения столбцов из barplot и немного подправив вверх и вниз. Вот пример с набором данных mtcars:

x <- barplot(table(mtcars$cyl), xaxt="n")
labs <- paste(names(table(mtcars$cyl)), "cylinders")
text(cex=1, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)
person Tyler Rinker    schedule 23.04.2012
comment
предостережение: если вы используете beside = TRUE, вы, вероятно, захотите использовать colMeans(x) вместо только x, если вам нужен только один ярлык на группу. - person MichaelChirico; 07.10.2016

используйте необязательный параметр las = 2.

barplot(mytable,main="Car makes",ylab="Freqency",xlab="make",las=2)

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

person Michael Z    schedule 11.01.2015
comment
Я считаю, что это должен быть принятый ответ. Отлично работает с параметром базовой функции штрихового графика, использованной в вопросе. - person jwhaley58; 08.11.2016
comment
Согласен, это должен быть принятый ответ. Гораздо более лаконичное решение - person snlan; 01.02.2017
comment
используйте par (mar = c (15,4,4,2)), чтобы отрегулировать поля, чтобы вертикальные метки не обрезались с рисунка. - person Steven Magana-Zook; 10.02.2017
comment
Я лично предпочитаю этот подход, но он не ответил на исходный вопрос OP: Я пытаюсь повернуть метки оси x на 45 градусов на полосе - person arpieb; 05.03.2017
comment
Вы можете видеть, что "make" покрыто этикетками. Как это исправить? - person Filip Bartuzi; 21.06.2020
comment
что "make", показанное под графиком, можно удалить, добавив title =. - person ibilgen; 02.09.2020

Поверните метки оси x на угол, равный или меньший 90 градусов, используя базовую графику. Код адаптирован из R FAQ:

par(mar = c(7, 4, 2, 2) + 0.2) #add room for the rotated labels

#use mtcars dataset to produce a barplot with qsec colum information
mtcars = mtcars[with(mtcars, order(-qsec)), ] #order mtcars data set by column "qsec"

end_point = 0.5 + nrow(mtcars) + nrow(mtcars) - 1 #this is the line which does the trick (together with barplot "space = 1" parameter)

barplot(mtcars$qsec, col = "grey50", 
        main = "",
        ylab = "mtcars - qsec", ylim = c(0,5 + max(mtcars$qsec)),
        xlab = "",
        space = 1)
#rotate 60 degrees (srt = 60)
text(seq(1.5, end_point, by = 2), par("usr")[3]-0.25, 
     srt = 60, adj = 1, xpd = TRUE,
     labels = paste(rownames(mtcars)), cex = 0.65)

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

person Andre Silva    schedule 24.02.2014

Вы можете просто передать свой фрейм данных в следующую функцию:

rotate_x <- function(data, column_to_plot, labels_vec, rot_angle) {
    plt <- barplot(data[[column_to_plot]], col='steelblue', xaxt="n")
    text(plt, par("usr")[3], labels = labels_vec, srt = rot_angle, adj = c(1.1,1.1), xpd = TRUE, cex=0.6) 
}

Использование:

rotate_x(mtcars, 'mpg', row.names(mtcars), 45)

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

При необходимости вы можете изменить угол поворота меток.

person Cybernetic    schedule 16.02.2018

Вы можете использовать

par(las=2) # make label text perpendicular to axis

Это написано здесь: http://www.statmethods.net/graphs/bar.html

person vlad    schedule 19.08.2014

Вы можете использовать ggplot2, чтобы повернуть метку оси x, добавив дополнительный слой

theme(axis.text.x = element_text(angle = 90, hjust = 1))
person Community    schedule 03.07.2018

В документации Bar Plots мы можем прочитать о дополнительных параметрах (...), которые могут быть переданы в вызов функции:

...    arguments to be passed to/from other methods. For the default method these can 
       include further arguments (such as axes, asp and main) and graphical 
       parameters (see par) which are passed to plot.window(), title() and axis.

В документации графических параметров (документация par) мы видим:

las
    numeric in {0,1,2,3}; the style of axis labels.

    0:
      always parallel to the axis [default],

    1:
      always horizontal,

    2:
      always perpendicular to the axis,

    3:
      always vertical.

    Also supported by mtext. Note that string/character rotation via argument srt to par does not affect the axis labels.

Вот почему передача las=2 - правильный ответ.

person banan3'14    schedule 18.12.2019

Ответ Андре Сильвы отлично подходит для меня с одним предостережением в строке «штриховой график»:

barplot(mtcars$qsec, col="grey50", 
    main="",
    ylab="mtcars - qsec", ylim=c(0,5+max(mtcars$qsec)),
    xlab = "",
    xaxt = "n", 
    space=1)

Обратите внимание на аргумент «xaxt». Без него надписи отрисовываются дважды, в первый раз без поворота на 60 градусов.

person Alvaro Gonzalez    schedule 03.05.2016