115

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

8 回答 8

306

使用可选参数 las=2 。

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

在此处输入图像描述

于 2015-01-11T13:39:23.830 回答
64

根据大卫的回应编辑答案:

这是一种骇人听闻的方式。我猜有一个更简单的方法。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)
于 2012-04-23T19:08:21.947 回答
31

使用基本图形以等于或小于 90 度的角度旋转 x 轴标签。改编自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)

在此处输入图像描述

于 2014-02-24T03:54:08.677 回答
10

您可以简单地将数据框传递给以下函数

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)

在此处输入图像描述

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

于 2018-02-16T04:39:51.403 回答
8

您可以使用

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

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

于 2014-08-19T12:03:17.720 回答
7

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

theme(axis.text.x = element_text(angle = 90, hjust = 1))
于 2018-07-03T05:31:26.050 回答
5

在 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.

在图形参数的文档(documentation of 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使标签垂直,尽管不是 45°

于 2019-12-18T22:14:25.460 回答
1

安德烈席尔瓦的回答对我很有用,在“条形图”行中有一个警告:

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

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

于 2016-05-03T22:14:04.760 回答