Поворотні мітки осей x у R для штанги


97

Я намагаюсь домогтися повернення міток осі х на 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

274

використовувати необов’язковий параметр las = 2.

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

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


3
Я вважаю, що це має бути прийнятою відповіддю. Відмінно працює, використовуючи параметр базової функції барплота, що використовується у питанні.
jwhaley58

1
Погоджено, це має бути прийнятою відповіддю. Набагато лаконічніше рішення
snlan

17
використовуйте par (mar = c (15,4,4,2)) для регулювання полів, щоб вертикальні мітки не обрізалися з рисунка.
Steven Magana-Zook

24
Я особисто віддаю перевагу такому підходу, але він не дав відповіді на вихідне запитання ОП: я намагаюся домогтися повертання міток осі х на 45 градусів на штанзі
arpieb

1
ви можете бачити, що "make" покрито ярликами. Як це виправити?
Філіп Бартузі

30

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

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



7

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

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 для обертання мітки осі х, додаючи додатковий шар

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.