Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 以ggplot并排绘制因子变量系列_R_Ggplot2_Dplyr_Count_Aggregate - Fatal编程技术网

R 以ggplot并排绘制因子变量系列

R 以ggplot并排绘制因子变量系列,r,ggplot2,dplyr,count,aggregate,R,Ggplot2,Dplyr,Count,Aggregate,我试图绘制一系列变量,这些变量在两个时间范围内收集。数据的结构是这样的,观测的数量是9700,类别是因子。 我想画一个像这样的条形图 我使用了聚合函数和dplyr,但无法为数据创建适当的结构 我很高兴你能帮我 谢谢,正如@Tung所建议的那样,您可以将数据转换为长格式,并在绘图中使用位置减淡,以便在绘图中条形图彼此相邻。这里有一个例子 使用tidyrpivot\u longer可以将以“sb”开头的列放入长格式。然后可以筛选出值为零的行unite将组合名称,例如sb_1和x以成为sb_1_

我试图绘制一系列变量,这些变量在两个时间范围内收集。数据的结构是这样的,观测的数量是9700,类别是因子。

我想画一个像这样的条形图

我使用了聚合函数和dplyr,但无法为数据创建适当的结构

我很高兴你能帮我


谢谢,

正如@Tung所建议的那样,您可以将数据转换为长格式,并在绘图中使用
位置减淡
,以便在绘图中条形图彼此相邻。这里有一个例子

使用
tidyr
pivot\u longer
可以将以“sb”开头的列放入长格式。然后可以
筛选出值为零的行
unite
将组合名称,例如
sb_1
x
以成为
sb_1_x

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

绘图


这些可能很有用&你是最棒的。你能帮我一下吗。如果我的变量大于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_更长(cols=以(“sb”)开始)%%>%filter(value!=0)%%>%unite(sb,name,value)%%>%ggplot(aes(x=sb_))+geom_-bar(aes(fill=wave),position=position\u-dodge2(preserve=“single”)
我得到了这个错误:错误:
mutate()
input
total.wave
。x参数i输入的“类型”(闭包)无效
total。wave
sum(count)
。我发现错误发生在第1组:wave=“first”。谢谢,我这样做了,条形图不会出现在绘图中。我提出了一个新问题,请检查一下,我将上传图片到那里。
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"))