在R中旋转x轴标签以显示条形图

时间:2012-04-23 18:53:43

标签: r graph plot bar-chart axis-labels

我试图让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)

8 个答案:

答案 0 :(得分:226)

使用可选参数las = 2.

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

enter image description here

答案 1 :(得分:55)

大卫回应的编辑答案:

这是一种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)

答案 2 :(得分:27)

如果要以等于或小于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

答案 3 :(得分:7)

您可以使用

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

这里写着:http://www.statmethods.net/graphs/bar.html

答案 4 :(得分:6)

您只需将数据框传递到以下功能

即可
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

您可以根据需要更改标签的旋转角度

答案 5 :(得分:4)

您可以使用ggplot2旋转x轴标签,添加一个附加层

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

答案 6 :(得分:2)

安德烈·席尔瓦的回答对我很有帮助,在“条形图”一行中有一点需要注意:

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

注意“xaxt”参数。没有它,标签被绘制两次,第一次没有60度旋转。

答案 7 :(得分:0)

在柱状图的文档中,我们可以阅读有关可以传递给函数调用的其他参数(...):

...    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是正确的答案的原因。