【问题标题】:Plotting series of factor variables side by ggplot通过ggplot绘制一系列因子变量
【发布时间】:2020-11-14 19:50:12
【问题描述】:

我正在尝试绘制一系列变量,这些变量是在两个时间框架中收集的。数据的结构是这样的,观察数是9700,类是因子。 Please see the structure of the data

我想绘制这样的条形图I will have a list of the sbs base on each wave

我使用过聚合函数和 dplyr,但我无法为数据建立正确的结构。

很高兴你能帮我解决这个问题。

谢谢,

【问题讨论】:

标签: r ggplot2 dplyr count aggregate


【解决方案1】:

正如@Tung 建议的那样,您可以将数据转换为长格式,并在绘图中使用position_dodge,这样图表中的条形就会彼此相邻。这是一个例子。

使用tidyr pivot_longer,您可以将以“sb”开头的列转换为长格式。然后你可以filter out 值为零的行。 unite 将组合名称 - 例如 sb_1x 成为 sb_1_x

在这种格式下,绘图更容易。使用geom_bar 创建条形图,并使用position_dodge2 将具有不同wave 值的条形相邻放置。 preserve = "single" 的使用使条形保持相同的宽度(在一个 wave 的计数为零的情况下)。

library(tidyverse)
library(ggplot2)

df %>%
  pivot_longer(cols = starts_with("sb")) %>%
  filter(value != 0) %>%
  unite(sb, name, value) %>%
  ggplot(aes(x = sb)) +
    geom_bar(aes(fill = wave), position = position_dodge2(preserve = "single"))

情节

【讨论】:

  • 你是最棒的。
  • 你能帮我解决这个问题吗? stackoverflow.com/questions/64884680/… 。如果我的变量超过 10,则顺序会更改。谢谢
  • 能否请您告诉我,如果我想要百分比而不是计数,我应该使用什么函数?这意味着对于每个条形,我需要(每个波中的 x 数/总样本数)。
  • new_data %>% group_by(wave) %>% mutate(total.wave= sum(count)) %>% group_by(total.wave, sb) %>% mutate(per=paste0(round(100*count/total.wave,2),'%')) pivot_longer(cols = starts_with("sb_")) %>% filter(value != 0) %>% unite(sb_,name, value) %>% ggplot(aes(x = sb_)) + geom_bar(aes(fill = wave), position = position_dodge2(preserve = "single"))) 我得到了这个错误:错误:mutate() 输入问题total.wave。 x 参数 i 的无效“类型”(闭包)输入 total.wavesum(count)。 i 错误发生在第 1 组:wave = "first"。
  • 谢谢你,我这样做了,并且情节中没有出现条形。我提出了一个新问题stackoverflow.com/questions/64939338/… 请检查一下,我会在那里上传图片。
猜你喜欢
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 2015-03-16
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多