barplot以多个colums为x轴

时间:2016-12-20 19:31:47

标签: r dataframe ggplot2 bar-chart

给出这样的数据框:

IDPLACES AMERICAN.EXPRESS VISA MASTERCARD CASH
201220                  0    1          0    1
201321                  1    1          1    1
201422                  0    0          0    1
201525                  1    1          1    1

IDPLACES是餐馆。

我想在x轴上创建一个barplot每种类型的付款,条形的高度表示接受该付款类型的餐馆数量。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

制作数据框。

df <- data.frame(idplaces = c("201220","201321","201422","201525"),
                 Amex = c(0,1,0,1),
                 visa = c(1,1,01,1),
                 mastercard = c(0,1,0,1),
                 cash = c(1,1,1,1))

首先,您必须重新格式化数据(ggplot2通常就是这种情况)。重新格式化的方式取决于您打算如何绘制它。我将使用geom_bar(),默认情况下条形的高度表示数据框中的个案数。因此,我将使用tidyr包中的gather重新格式化为长数据帧,然后过滤掉餐馆不接受该方法的任何情况。生成的数据框将包含restuarant id的列,每个餐厅接受的每种付款方式都有一行。

> df_long <- df %>% 
 +  gather("method", "accepts", -idplaces, factor_key = TRUE) %>% 
 +  filter(accepts == 1)

> df_long
   idplaces     method accepts
1    201321       Amex       1
2    201525       Amex       1
3    201220       visa       1
4    201321       visa       1
5    201422       visa       1
6    201525       visa       1
7    201321 mastercard       1
8    201525 mastercard       1
9    201220       cash       1
10   201321       cash       1
11   201422       cash       1
12   201525       cash       1

要在x轴上使用方法绘图,请在x=method中设置aes()

> ggplot(df_long, aes(x=method)) + 
  + geom_bar()

enter image description here