【问题标题】:how to make barplot bars same size in plot window in R using barplot function如何使用 barplot 函数在 R 的绘图窗口中使 barplot 条的大小相同
【发布时间】:2015-07-20 19:58:52
【问题描述】:

我想在同一个窗口中绘制 3 个图。每个都有不同数量的条形图。如果不在较小的条形图中进行 NA,我怎样才能使它们大小相同并靠近(彼此距离相同)。下面的示例代码。我确实想指出我的真实数据将绘制来自 dataframes$columns 的数字,而不是如下所示的数字向量。我确信有一种神奇的方法可以做到这一点,但似乎无法在网上找到有用的信息。谢谢

pdf(file="PATH".pdf");
par(mfrow=c(1,3));
par(mar=c(9,6,4,2)+0.1);
barcenter1<- barplot(c(1,2,3,4,5));
mtext("Average Emergent", side=2, line=4);
par(mar=c(9,2,4,2)+0.1);
barcenter2<- barplot(c(1,2,3));
par(mar=c(9,2,4,2)+0.1);
barcenter3<- barplot(c(1,2,3,4,5,6,7));

或者是否有一种方法可以代替使用 par(mfrow....) 来制作绘图窗口,我们可以将 barcenter 数据分组到一个绘图上,并且在柱之间留有空白空间吗?这样一来,一切都被隔开,看起来都一样?

【问题讨论】:

    标签: r bar-chart


    【解决方案1】:

    使用参数xlimwidth

    par(mfrow = c(1, 3))
        par(mar = c(9, 6, 4, 2) + 0.1)
        barcenter1 <- barplot(c(1, 2, 3, 4, 5), xlim = c(0, 1), width = 0.1)
        mtext("Average Emergent", side = 2, line = 4)
        par(mar = c(9, 2, 4, 2) + 0.1)
        barcenter2 <- barplot(c(1, 2, 3), xlim = c(0, 1), width = 0.1)
        par(mar = c(9, 2, 4, 2) + 0.1)
        barcenter1 <- barplot(c(1, 2, 3, 4, 5, 6, 7), xlim = c(0, 1), width = 0.1)
    

    引入零:

    df <- data.frame(barcenter1 = c(1, 2, 3, 4, 5, 0, 0), 
                     barcenter2 = c(1, 2, 3, 0, 0, 0, 0), 
                     barcenter3 = c(1, 2, 3, 4, 5, 6, 7))
    barplot(as.matrix(df), beside = TRUE)
    

    使用ggplot2,您可以获得这样的结果:

    df <- data.frame(x=c(1, 2, 3, 4, 5,1, 2, 3,1, 2, 3, 4, 5, 6, 7),
    y=c(rep("bar1",5), rep("bar2",3),rep("bar3",7)))
    library(ggplot2)
    ggplot(data=df, aes(x = x, y = x)) +
      geom_bar(stat = "identity")+
      facet_grid(~ y)
    

    对于您在第二条评论中提到的选项,您需要:

    x <- c(1, 2, 3, 4, 5, NA, 1, 2, 3, NA, 1, 2, 3, 4, 5, 6, 7)
    barplot(x)
    

    【讨论】:

    • @mpalanco 这会起作用,但仍然不是我的想法。无论如何,我只是再次编辑它。如何在 barplot 上绘制所有内容,每组之间有空白空间?
    • @user3919708 如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
    • 您好 mpalanco,最后提出的解决方案是我想到的想法,但正在寻找单独的图而不是一个。经过昨晚几个小时的阅读,这个解决方案似乎是最好的。因此,我会这样做。感谢您的宝贵时间,对给您带来的麻烦表示歉意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2022-08-03
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多