R中条形图数组中的恒定条宽度

我正在尝试制作一个(1行,3列)条形图数组,它们都具有相同的条形宽度.

所有三个条形图具有不同数量的观察结果,因此每个图的条的宽度最终不同(即,具有最多观察值的图具有最窄条,并且具有最少观察值的图具有最宽条).我从barplot {graphics} R文档中了解到,

“Specifying a single value will have no visible effect unless xlim is specified”

但是,我的x标签是字符串,所以我不知道如何指定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)

最佳答案 如果没有像height4plot1这样的变量,那么测试代码和修改会更加困难,但这里有一些可能性:

您可以为每个绘图指定width = 0.8,xlim = c(0,maxnum),其中maxnum是不同绘图中的最大柱数.这将在每个较小的条形图中留下空白部分.

您可以使用NA填充较短的高度向量,直到它们都具有相同的长度(这仍然会给出空白部分).

您可以将3个向量连接在一起并制作单个箱图,可能会对3个组进行不同的着色以帮助区分它们. abline函数可用于在组之间添加分隔线(并查看barplot的space参数,或者包含’NA’作为分隔符以在组之间提供更多空间).您可以使用返回值来帮助在每个组上方放置标题.

您可以使用布局而不是par来设置3个绘图区域以具有不同的宽度,但是获得精确的宽度比率以给出完全相同的大小条并不简单(尽管如此,您可能会接近试验和错误).如果你真的想要这条路线,那么grconvertX和optim可能有所帮助.

我建议上面的第二个选项.

点赞