【问题标题】:barplot with multiple colums as x-axis以多列为 x 轴的条形图
【发布时间】:2017-05-06 02:49:45
【问题描述】:

给定这样的数据框:

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 是餐厅。

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

【问题讨论】:

  • barplot(colSums(d[, -1]))
  • 谢谢!但是,我必须用 ggplot2 创建它,并且当我运行它时
  • ggplot()+ geom_bar(x= colSums(payment[, -1]))
  • 什么也没发生
  • 您可能需要重塑数据集。查看herehere 的一些示例。

标签: r dataframe ggplot2 bar-chart


【解决方案1】:

制作数据框。

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 重新格式化为一个长数据框,然后过滤掉餐厅不接受该方法的任何情况。生成的数据框将包含餐厅 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()

【讨论】:

  • 非常感谢!事实上,它就像一个魅力:)
  • @Lilian ;如果 Rose 的解决方案已经回答了您的问题,您可以点击对勾进行标记。
猜你喜欢
  • 2020-11-20
  • 2022-06-14
  • 1970-01-01
  • 2021-11-19
  • 2018-07-28
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多