2012-04-23 665 views
60

我試圖讓x軸標籤在barplot上旋轉45度而沒有運氣。這是我有下面的代碼:在R中爲barplot旋轉x軸標籤

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 ANSWER PER大衛的迴應:

這裏有一種hackish的方式。我猜測有一個更簡單的方法。但是,您可以通過從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 2016-10-07 03:59:34

23

如果你想旋轉與角度等於或小於90 x軸標籤,請嘗試以下方法:

它使用barplot的說法space=1使列的寬度等於列的間隔空間。

通過這種方式,我們可以調整由Tyler Rinker的答案根據@BenBarnes指定的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" (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

絕對可行。謝謝 – 2016-04-21 09:03:47

+1

我相信這應該是被接受的答案。完美地使用問題中使用的基本barplot函數的參數。 – jwhaley58 2016-11-08 15:06:27

+0

同意,這應該是被接受的答案。更簡潔的解決方案 – snlan 2017-02-01 13:30:59

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

您可以更改的旋轉角度標籤如所須。