旋转R中的x轴标签进行绘制


97

我正在尝试使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)

Answers:


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
我认为这应该是公认的答案。使用问题中使用的基本barplot函数的参数可以完美地工作。
jwhaley58 2016年

1
同意,这应该是公认的答案。更简洁的解决方案
snlan,2017年

17
使用par(mar = c(15,4,4,2))调整边距,以使垂直标签不会从图中裁切。
史蒂文·玛格纳·祖克

24
我个人更喜欢这种方法,但是它没有回答OP的原始问题: 我试图使x轴标签在小程序上旋转45度
arpieb

1
您会看到“ make”被标签覆盖。如何解决?
Filip Bartuzi

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旋转x轴标签,添加一个附加层

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

2

安德烈·席尔瓦(Andre Silva)的答案对我非常有用,在“ barplot”行中有一个警告:

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

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


1

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.