如何在R中使用ggplot绘制多个构面直方图?

时间:2019-05-08 08:30:30

标签: r ggplot2

我有一个这样的数据框

 Elem. Category. SEZa SEZb SEZc

  A.     ONE.     1.   3.   4
  B.     TWO.     4.   5.   6
我想用ggplot在三个不同的面(SEZa,SEZb,SEZc)中绘制三个直方图,其中x值是类别值(一。e两个),y值是SEZa,SEZb列中的数字,经济特区。

类似这样的东西:

enter image description here

我该怎么办?谢谢您的建议!

2 个答案:

答案 0 :(得分:1)

假设df是您的data.frame,我首先将宽格式转换为长格式:

new_df <- reshape2::melt(df, id.vars = c("Elem", "Category"))

然后使用geom_col()而不是geom_histogram()进行绘图,因为似乎您已经预先计算了y值,并且不需要ggplot为您计算这些值。

ggplot(new_df, aes(x = Category, y = value, fill = Elem)) +
  geom_col() +
  facet_grid(variable ~ .)

答案 1 :(得分:0)

我认为您正在寻找的是这样的东西:

library(ggplot2)
library(reshape2)

df <- data.frame(Category = c("One", "Two"),
                 SEZa = c(1, 4),
                 SEZb = c(3, 5),
                 SEZc = c(4, 6))

df <- melt(df)

ggplot(df, aes(x = Category, y = value)) +
  geom_col(aes(fill = variable)) + 
  facet_grid(variable ~ .)

我的灵感是:

http://felixfan.github.io/stacking-plots-same-x/