r箱图倾斜标签x轴。

时间:2022-12-06 13:02:19

how can you rotate the labels of the x axis for boxplot in r? I know which code to use but I can't apply it:

在r中如何旋转x轴的标签?我知道应该使用哪一种代码,但我不能应用它:

text(**????**, par("usr")[3] - 0.25, srt = 45, adj = 1, labels = labels, xpd = TRUE)

What variable goes where I have the question marks? I created this boxplot:

有问号的地方有什么变量?我创建了这个箱线图:

r箱图倾斜标签x轴。

using this code:

使用这段代码:

soil=read.csv("soil_temp_boxplot.csv", header=TRUE, sep=";")    
tiff("soil_boxplot.tiff")
par(mar=c(5.5,3.5,0.5,0.5))
labels<-paste(c("RB-GL830-[16]-10","RB-GL830-[16]-30", "SB-GL834-[11]-10","SB-GL834-[11]-30", "RB-GL843-[17]-10","RB-GL843-[17]-30","SB-GL864-[12]-10","SB-GL864-[12]-30","SB-GL989-[10]-30", "RB-F844-[18]-10", "RB-F844-[18]-30", "SBB-F-864-[14]-10","SB-F991-[13]-10", "SB-F991-[13]-30"))
boxplot(soil$rb.gl.10.830.16, soil$rb.gl.30.830.16, soil$sb.gl.10.834.11, soil$sb.gl.30.834.11, soil$rb.gl.10.843.17, soil$rb.gl.30.843.17, soil$sb.gl.10.864.12, soil$sb.gl.30.864.12, soil$sb.gl.30.989.10, soil$rb.f.10.844.18, soil$rb.f.30.844.18, soil$sbb.f.10.864.14, soil$sb.f.10.991.13, soil$sb.f.30.991.13, yaxt="n", col=c("darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","burlywood2","burlywood4","burlywood2","burlywood2", "burlywood4"))
axis(1, labels = TRUE)
axis(2, c(0, 8, c(1, 2, 3, 4, 5,6,7)), las=1)
text(labels, par("usr")[3] - 0.25, srt = 45, adj = 1, labels = labels, xpd = TRUE)
mtext(2, text="Soil Temperature [°C]", line=2.2)
mtext(1, text="Location", line=4.5)
dev.off()

2 个解决方案

#1


10  

An alternative following your original text expression:

以下是你的原文:

par(mar=c(6, 4.1, 4.1, 2.1))

labels <- paste(c("RB-GL830-[16]-10", 
                  "RB-GL830-[16]-30",
                  "SB-GL834-[11]-10",
                  "SB-GL834-[11]-30",
                  "RB-GL843-[17]-10",
                  "RB-GL843-[17]-30"))

boxplot(count ~ spray, data = InsectSprays,
        col = "lightgray", xaxt = "n",  xlab = "")

# x axis with ticks but without labels
axis(1, labels = FALSE)

# Plot x labs at default x position
text(x =  seq_along(labels), y = par("usr")[3] - 1, srt = 45, adj = 1,
     labels = labels, xpd = TRUE)

Why use x = seq_along(labels) for label positions? The x in text is a vector of coordinates where to put the labels. If you look at ?boxplot, you find that the at argument is a "numeric vector giving the locations where the boxplots should be drawn [...]; defaults to 1:n where n is the number of boxes." Because we haven't specified the at argument in the boxplot call, the default "1:n positions" will be used. The number of boxes is of course the number of levels of your explanatory variable, which @Josh O'Brien used in his answer. To show you an alternative, I used your customized label vector instead (which of course must have the same length as the number of factor levels). seq_along generates a regular sequence from 1 to length of the argument, which corresponds to the "defaults to 1:n" at positions.

为什么在标签位置使用x = seq_along(标签)?文本中的x是坐标的矢量,在这里放置标签。如果你看看,boxplot,你会发现,at参数是一个“数字矢量,给出了箱线图应该被绘制的位置[…];默认值为1:n,其中n为框数。因为我们还没有在boxplot调用中指定参数,默认的“1:n个位置”将被使用。盒子的数量当然是你解释变量的数量,这是@Josh O’布莱恩在他的回答中使用的。为了向您展示另一种选择,我使用了您定制的标签向量(当然,它的长度必须与元素级别的数量相同)。seq_along生成一个从1到长度的规则序列,该序列对应于位置上的“默认值为1:n”。

A side-note: your data seem to be in a 'wide' format. In many instances in R, it is more convenient to have the data in a 'long' format. In the plot function, you then only need to specify your x variable (e.g. location) and y variable (e.g. soil temp), instead of specifying data for every single level of x. r箱图倾斜标签x轴。

附注:你的数据似乎是“宽”格式。在R的许多实例中,使用“long”格式的数据更方便。在plot函数中,您只需要指定x变量(例如位置)和y变量(例如土壤温度),而不是为每一个级别的x指定数据。

#2


2  

Look at the staxlab function in the plotrix package, it makes this (and an alternative) fairly straight forward.

看看plotrix包中的staxlab函数,它使这个(和另一个选择)相当直接。

#1


10  

An alternative following your original text expression:

以下是你的原文:

par(mar=c(6, 4.1, 4.1, 2.1))

labels <- paste(c("RB-GL830-[16]-10", 
                  "RB-GL830-[16]-30",
                  "SB-GL834-[11]-10",
                  "SB-GL834-[11]-30",
                  "RB-GL843-[17]-10",
                  "RB-GL843-[17]-30"))

boxplot(count ~ spray, data = InsectSprays,
        col = "lightgray", xaxt = "n",  xlab = "")

# x axis with ticks but without labels
axis(1, labels = FALSE)

# Plot x labs at default x position
text(x =  seq_along(labels), y = par("usr")[3] - 1, srt = 45, adj = 1,
     labels = labels, xpd = TRUE)

Why use x = seq_along(labels) for label positions? The x in text is a vector of coordinates where to put the labels. If you look at ?boxplot, you find that the at argument is a "numeric vector giving the locations where the boxplots should be drawn [...]; defaults to 1:n where n is the number of boxes." Because we haven't specified the at argument in the boxplot call, the default "1:n positions" will be used. The number of boxes is of course the number of levels of your explanatory variable, which @Josh O'Brien used in his answer. To show you an alternative, I used your customized label vector instead (which of course must have the same length as the number of factor levels). seq_along generates a regular sequence from 1 to length of the argument, which corresponds to the "defaults to 1:n" at positions.

为什么在标签位置使用x = seq_along(标签)?文本中的x是坐标的矢量,在这里放置标签。如果你看看,boxplot,你会发现,at参数是一个“数字矢量,给出了箱线图应该被绘制的位置[…];默认值为1:n,其中n为框数。因为我们还没有在boxplot调用中指定参数,默认的“1:n个位置”将被使用。盒子的数量当然是你解释变量的数量,这是@Josh O’布莱恩在他的回答中使用的。为了向您展示另一种选择,我使用了您定制的标签向量(当然,它的长度必须与元素级别的数量相同)。seq_along生成一个从1到长度的规则序列,该序列对应于位置上的“默认值为1:n”。

A side-note: your data seem to be in a 'wide' format. In many instances in R, it is more convenient to have the data in a 'long' format. In the plot function, you then only need to specify your x variable (e.g. location) and y variable (e.g. soil temp), instead of specifying data for every single level of x. r箱图倾斜标签x轴。

附注:你的数据似乎是“宽”格式。在R的许多实例中,使用“long”格式的数据更方便。在plot函数中,您只需要指定x变量(例如位置)和y变量(例如土壤温度),而不是为每一个级别的x指定数据。

#2


2  

Look at the staxlab function in the plotrix package, it makes this (and an alternative) fairly straight forward.

看看plotrix包中的staxlab函数,它使这个(和另一个选择)相当直接。