R 以ggplot并排绘制因子变量系列
我试图绘制一系列变量,这些变量在两个时间范围内收集。数据的结构是这样的,观测的数量是9700,类别是因子。 我想画一个像这样的条形图 我使用了聚合函数和dplyr,但无法为数据创建适当的结构 我很高兴你能帮我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_
谢谢,正如@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()
inputtotal.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"))