我正在尝试制作一个(1行,3列)条形图数组都具有相同的条形宽度。
所有三个条形图具有不同数量的观察结果,因此每个图的条形宽度最终不同(即,具有最多观察值的图具有最窄条并且具有最少观察值的图具有最宽条)。我从barplot {graphics}
R
文档中了解到,
“除非指定
,否则指定单个值将无效xlim
”
但是,我的x labels
是字符串,因此我不确定如何指定xlim
。我不介意我的情节是否有不同的宽度,但是我需要以某种方式指定它吗?
以下是一些虚假数据和我正在使用的代码...感谢您的帮助。
height4plot1 <- c(1,6,9,2,3,10,7,15)
names4plot1 <- c("P1","P2","P3","P4","P5","P6","P7","P8")
height4plot2 <- c(5,4,10,2)
names4plot2 <- c("M1","M2","M3","M4")
height4plot3 <- c(4,12)
names4plot3 <0 c("U1","U2")
par(mfrow=c(1,3),
mar=c(10,5,2,1),
cex.axis=0.7,
mgp=c(3,0.5,0))
barplot(height4plot1,
names.arg=names4plot1,
las=3,
axes=TRUE,
axisnames=TRUE,
ylab="YLAB",
ylim=ylim,
plot=TRUE,
main="PLOT1",
width=1)
barplot(height4plot2,
names.arg=names4plot2,
las=3,
axes=TRUE,
axisnames=TRUE,
ylim=ylim,
plot=TRUE,
main="PLOT2",
width=1)
barplot(height4plot3,
names.arg=names4plot3,
las=3,
axes=TRUE,
axisnames=TRUE,
ylim=ylim,
plot=TRUE,
main="PLOT3",
width=1)
答案 0 :(得分:1)
没有height4plot1
等变量,测试代码和修改会比较困难,但这里有一些可能性:
您可以为每个绘图指定width=0.8
,并xlim=c(0,maxnum)
,其中maxnum是不同绘图中的最大条数。这将在每个较小的条形图中留下空白部分。
您可以使用NA
填充较短的高度向量,直到它们的长度相同(这仍然会给出空白部分)。
您可以将3个向量连接在一起并制作单个箱图,可能会对3个组进行不同的着色以帮助区分它们。 abline
函数可用于在组之间添加分隔线(并参见barplot的space
参数,或包含'NA'作为分隔符以在组之间提供更多空间)。您可以使用返回值来帮助在每个组上方放置标题。
您可以使用layout
代替par
将3个绘图区域设置为具有不同的宽度,但获得精确的宽度比率以获得完全相同的大小条形图并不简单(您可能会接近试验和错误)。如果您真的想要这条路线,那么grconvertX
和optim
可能有所帮助。
我建议上面的第二个选项。
答案 1 :(得分:1)
我用我的替换你的不可纠正的例子,似乎工作。 barplot的xlim参数是一个整数值,范围从1到组数:
tN <- table(Ni <- stats::rpois(100, lambda=5))
opar <- par(mfrow=c(1,3),
mar=c(10,5,2,1),
cex.axis=0.7,
mgp=c(3,0.5,0))
barplot(tN[1:3],
xlim=c(1, length(tN) ),
las=3,
axes=TRUE,
axisnames=TRUE,
ylab="YLAB",
plot=TRUE,
main="PLOT1",
width=1)
barplot(tN[1:4],
xlim=c(1, length(tN) ),
las=3,
axes=TRUE,
axisnames=TRUE,
plot=TRUE,
main="PLOT2",
width=1)
barplot(tN[1:5],
xlim=c(1, length(tN) ),
las=3,
axes=TRUE,
axisnames=TRUE,
plot=TRUE,
main="PLOT3",
width=1)
par(opar)