【问题标题】:R GGplot2 Stacked Columns ChartR GGplot2堆积柱形图
【发布时间】:2016-09-16 19:13:24
【问题描述】:

我正在尝试在 R 中制作堆积柱形图。抱歉,我正在学习这就是我需要帮助的原因

这就是我拥有数据的方式

structure(list(Category = structure(c(2L, 3L, 4L, 1L), .Label = c("MLC1000", 
    "MLC1051", "MLC1648", "MLC5726"), class = "factor"), Minutes = c(2751698L, 
    2478850L, 556802L, 2892097L), Items = c(684L, 607L, 135L, 711L
    ), Visits = c(130293L, 65282L, 25484L, 81216L), Sold = c(2625L, 
    1093L, 681L, 1802L)), .Names = c("Category", "Minutes", "Items", 
    "Visits", "Sold"), class = "data.frame", row.names = c(NA, -4L)
)

我想创建这个图形

【问题讨论】:

  • 到目前为止您尝试过什么?此外,如果您在问题中dput() 您的数据框将很有帮助,以便我们可以轻松地重新创建它。
  • 堆积条对于人们来说真的很难解释。您是否有理由要使用这种类型的可视化而不是其他人?
  • @gregmacfarlane 它不一样,它相似但不一样,看看我是如何获得数据的,然后比较
  • 不是一个完全的骗局,但这是一个非常接近的骗局:stackoverflow.com/questions/33328134/…

标签: r ggplot2


【解决方案1】:

我认为你应该应用两个非常基本的原则来使这个问题更容易处理。首先,您应该将您的数据设为tidy。其次,你不应该让 ggplot 为你做计算。

library(tidyverse)

a <- data_frame(
  category = letters[1:4],
  minutes = c(2751698, 2478850, 556802, 2892097),
  visits = c(130293, 65282, 25484, 81216),
  sold = c(2625, 1093, 681, 1802)
) %>%
  gather(variable, value, -category) %>%   # make tidy
  group_by(variable) %>%
  mutate(weight = value / sum(value))   # calculate weight variable

## Source: local data frame [12 x 4]
## Groups: variable [3]
##   category variable   value     weight
##       <chr>    <chr>   <dbl>      <dbl>
## 1         a  minutes 2751698 0.31703610
## 2         b  minutes 2478850 0.28559999
## 3         c  minutes  556802 0.06415178
## 4         d  minutes 2892097 0.33321213
## 5         a   visits  130293 0.43104127
## 6         b   visits   65282 0.21596890
## 7         c   visits   25484 0.08430734
## 8         d   visits   81216 0.26868249
## 9         a     sold    2625 0.42331882
## 10        b     sold    1093 0.17626189
## 11        c     sold     681 0.10982100
## 12        d     sold    1802 0.29059829

我不知道您的 structure() 发生了什么,但我无法在不使 R 会话崩溃的情况下从中构建数据框。

一旦我们将数据转换成这种格式,ggplot2 调用实际上就很简单了:

ggplot(a, aes(x = variable, weight = weight * 100, fill = category)) +
  geom_bar()

【讨论】:

  • library(tidyverse)?真的是这样吗?
猜你喜欢
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
相关资源
最近更新 更多