2012-04-23 2 views
60

Я пытаюсь заставить метки оси x поворачиваться на 45 градусов на планшете без везения. Это код, который я ниже:Поворот по оси X в R для штрих-кода

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) 

ответ

45

EDITED ОТВЕТ НА РЕАКЦИИ Давидовы:

Вот своего рода хак способом. Я предполагаю, что есть более простой способ. Но вы можете подавить ярлыки на барах и текст надписи на этикетках, сохранив позиции бара от 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) 
+0

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

23

Если вы хотите, чтобы повернуть метки оси х с углом, равным или меньшим, чем 90, попробуйте следующий подход:

Он использует аргумент barplot в space=1 сделать ширина столбцов равна интервалу интервалов столбцов.

Таким образом, было возможно адаптировать код, предоставленный в R FAQ, который был определен @BenBarnes под ответом Тайлера Ринкера.

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" (source: http://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns-in-r) 

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) 

enter image description here

154

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

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

enter image description here

+0

рабочий абсолютно. спасибо –

+1

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

+0

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

1

ответ Андре Сильва здорово работает для меня, с одной оговоркой в ​​строке "barplot":

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

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

0

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

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) 

enter image description here

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