【问题标题】:Plot several histograms with ggplot in one window with several variables在一个窗口中使用 ggplot 绘制多个直方图,其中包含多个变量
【发布时间】:2014-11-07 13:17:05
【问题描述】:

我想使用 ggplot 绘制 6 个直方图。每个直方图对应一个产品(例如 Modis 2000、Modis 2005 等)。 x 轴是土地利用(农业、建筑等),y 轴是百分比误差,包括佣金误差 (_CE) 和遗漏误差 (_OE)。对于每种土地利用,这两个错误的条应该是相邻的(见附图。

structure(list(X = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
    1L, 2L, 1L, 2L), .Label = c("Forest_CE", "Forest_OE"), class = "factor"), 
        Product = structure(c(5L, 5L, 6L, 6L, 3L, 3L, 4L, 4L, 1L, 
        1L, 2L, 2L), .Label = c("CCI 2000", "CCI 2005", "GLC-SHARE2000", 
        "GLC-SHARE2005", "Modis 2000", "Modis 2005"), class = "factor"), 
        Agriculture = c(45.42827657, 36.98156682, 48.19181349, 55.41838134, 
        41.6579589, 29.74910394, 42.88911495, 7.112253642, 38.86168911, 
        86.76103247, 44.08410549, 88.54166667), Built.up = c(0.990712074, 
        0.115207373, 0.702079746, 0.137174211, 0.104493208, 0, 0.996948118, 
        0, 1.591187271, 0, 1.069137562, 0), Mining = c(0.557275542, 
        0, 0.132467877, 0, 0.870776733, 0, 0.22380468, 0, 1.407588739, 
        0, 0.249465431, 0), Other = c(52.73477812, 51.38248848, 50.73519671, 
        44.17009602, 56.94879833, 70.25089606, 55.50356053, 77.97772065, 
        57.71113831, 11.07410491, 54.16963649, 7.899305556), Water = c(0.288957688, 
        11.52073733, 0.238442178, 0.274348422, 0.417972832, 0, 0.386571719, 
        14.91002571, 0.428396573, 2.164862614, 0.427655025, 3.559027778
        )), .Names = c("X", "Product", "Agriculture", "Built.up", 
    "Mining", "Other", "Water"), class = "data.frame", row.names = c(NA, 
    -12L))

这是我想要实现的,但此直方图是为一种产品制作的。我想为每种产品创建相同类型的直方图,并且所有直方图都应该在一个窗口中弹出。有人可以帮我这样做吗?感谢您的帮助。

【问题讨论】:

    标签: r ggplot2 histogram


    【解决方案1】:

    您可以使用facet_wrap 来实现您所描述的:

    yellowmellow <- structure(list(X = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
                                   1L, 2L, 1L, 2L), .Label = c("Forest_CE", "Forest_OE"), class = "factor"), 
                   Product = structure(c(5L, 5L, 6L, 6L, 3L, 3L, 4L, 4L, 1L, 
                                         1L, 2L, 2L), .Label = c("CCI 2000", "CCI 2005", "GLC-SHARE2000", 
                                                                 "GLC-SHARE2005", "Modis 2000", "Modis 2005"), class = "factor"), 
                   Agriculture = c(45.42827657, 36.98156682, 48.19181349, 55.41838134, 
                                   41.6579589, 29.74910394, 42.88911495, 7.112253642, 38.86168911, 
                                   86.76103247, 44.08410549, 88.54166667), Built.up = c(0.990712074, 
                                                                                        0.115207373, 0.702079746, 0.137174211, 0.104493208, 0, 0.996948118, 
                                                                                        0, 1.591187271, 0, 1.069137562, 0), Mining = c(0.557275542, 
                                                                                                                                       0, 0.132467877, 0, 0.870776733, 0, 0.22380468, 0, 1.407588739, 
                                                                                                                                       0, 0.249465431, 0), Other = c(52.73477812, 51.38248848, 50.73519671, 
                                                                                                                                                                     44.17009602, 56.94879833, 70.25089606, 55.50356053, 77.97772065, 
                                                                                                                                                                     57.71113831, 11.07410491, 54.16963649, 7.899305556), Water = c(0.288957688, 
                                                                                                                                                                                                                                    11.52073733, 0.238442178, 0.274348422, 0.417972832, 0, 0.386571719, 
                                                                                                                                                                                                                                    14.91002571, 0.428396573, 2.164862614, 0.427655025, 3.559027778
                                                                                                                                                                     )), .Names = c("X", "Product", "Agriculture", "Built.up", 
                                                                                                                                                                                    "Mining", "Other", "Water"), class = "data.frame", row.names = c(NA, 
                                                                                                                                                                                                                                                     -12L))
    
    # using reshape 2, we change the data frame to long format
    mean.long = melt(yellowmellow, measure.vars = 3:7, variable.name = "Land", value.name = "Percentage")
    
    
    ggplot(mean.long, aes(x=Land, y=Percentage, fill=factor(X))) + theme_bw() + facet_wrap(~Product)+ 
      geom_bar(position=position_dodge(.9)) + # this line is not needed. Only included as a fix for legend/key random line
      geom_bar(position=position_dodge(.9), stat="identity", colour="black", legend = FALSE)  + 
      scale_fill_grey(start=.4)
    

    我猜这就是你要找的。我基本上将您的数据放入数据框(黄色)并使用melt 将其转换为长格式数据,以便与ggplotfacet_wrap 一起使用。这是上面代码的输出:

    编辑:或者,您可以通过将 nrow=1 添加到 facet_wrap 来获得单行上的所有图表:

    ggplot(mean.long, aes(x=Land, y=Percentage, fill=factor(X))) + theme_bw() + facet_wrap(~Product, nrow=1)+
     geom_bar(position=position_dodge(.9)) + # this line is not needed. Only included as a fix for legend/key random line
      geom_bar(position=position_dodge(.9), stat="identity", colour="black", legend = FALSE)  + 
      scale_fill_grey(start=.4)
    

    看起来像这样:

    我使用以下尺寸导出此图像以避免重叠 x 轴标签:2000*1500。

    您可以使用不同的导出大小和字体大小来找到您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多