r boxplot倾斜标签x轴

sam*_*jam 8 layout r boxplot axis-labels

如何在r中旋转盒子图的x轴标签?我知道要使用哪些代码但我无法应用它:

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

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

在此输入图像描述

使用此代码:

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()
Run Code Online (Sandbox Code Playgroud)

Hen*_*rik 12

原始text表达式之后的替代方案:

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)
Run Code Online (Sandbox Code Playgroud)

为什么要x = seq_along(labels)用于标签位置?该xtext是坐标为载体放在哪里的标签.如果你看一下?boxplot,你会发现at参数是一个"数字向量,给出了应该绘制箱图的位置[...];默认为1:n,其中n是方框数." 因为我们没有atboxplot调用中指定参数,所以将使用默认的"1:n位置".框的数量当然是解释变量的级别数,@ Josh O'Brien在他的回答中使用了这些级别.为了向您展示替代方案,我使用了您自定义的标签向量(当然,其长度必须与因子级别的数量相同).seq_along生成从1到1的常规序列length该参数的对应于"默认为1:n"的at位置.

附注:您的数据似乎是"宽"格式.在R的许多实例中,以"长"格式存储数据更方便.在plot函数中,您只需要指定x变量(例如位置)和y变量(例如土壤温度),而不是为每个x级别指定数据. 在此输入图像描述

  • 这很好!但是 `y = par("usr")[3] - 1` 在不同的尺度下效果不佳。最好使用 `y = par("usr")[3] - (par("usr")[4] - par("usr")[3])/30`,其中 `30` 是用作标签和轴之间的空间的高度比例。在任何规模下都以相同的方式工作:) (2认同)