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


99

Я пытаюсь повернуть метки оси 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)

Ответы:


60

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

Вот такой хакерский способ. Думаю, есть способ попроще. Но вы можете подавить метки столбцов и текст на графике меток, сохранив позиции 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)

3
предостережение : если вы используете beside = TRUE, вы, вероятно, захотите использовать colMeans(x)вместо него xтолько одну метку для каждой группы.
MichaelChirico

278

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

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

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


3
Я считаю, что это должен быть принятый ответ. Отлично работает с параметром базовой функции штрихового графика, использованной в вопросе.
jwhaley58 08

1
Согласен, это должен быть принятый ответ. Гораздо более лаконичное решение
snlan 01

17
используйте par (mar = c (15,4,4,2)), чтобы отрегулировать поля, чтобы вертикальные метки не обрезались с рисунка.
Стивен Магана-Зук

24
Я лично предпочитаю этот подход, но он не дал
arpieb

1
Вы можете видеть, что «make» покрыто этикетками. Как это исправить?
Филип Бартузи,

31

Поверните метки оси 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)

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


9

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

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)

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

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



6

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

theme(axis.text.x = element_text(angle = 90, hjust = 1))

2

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

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

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


1

В документации 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- правильный ответ.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.