ggplot2 或 sjPlot 总和堆叠条形图列
ggplot2 or sjPlot sum stacked barplot columns
我是 运行 R 版本 3.5.2 (2018-12-20) -- "Eggshell Igloo" 在 MacBook Pro 上,OS 10.14.2。
我尝试了几种方法来获取这些图。我的首选方法是尝试创建我的数据的堆叠条形图(随时间分组的因素,我的 x 轴和计数作为 y),每列中有一个二分变量计数 0,1 计数,因为它们与 y 上的计数相匹配轴。但是我很灵活。我有这段代码,如果我可以在上面叠加一个条形图会有所帮助。
ggplot(dat, aes(x=factor(yr),y=n, group=(n>0)))+
stat_summary(aes(color=(n>0)),fun.y=length, geom="line")+
scale_color_discrete("Key",labels=c("NN", "N"))+
labs(title= "1992-2018", x="Years",y="n")
使用我的完整数据集,我尝试了这个并且非常接近堆叠条形图,它为我提供了每个 "yr" 变量的正确计数,但是对于我的变量 "n" 它给了我一个连续范围 0-1.0.
p<-ggplot(data=dat, aes(x=dat$yr, y=n, fill=n)) +
+ geom_bar(stat="identity")
这是我最感兴趣的数据。我试图将其强制转换为 table 然后是数据框。
t2<- table(dat$yr, dat$n)
0 1
1992 6 0
1993 10 0
1994 3 1
1995 20 2
1996 15 2
1997 16 0
1998 16 0
1999 9 3
2000 5 0
2001 5 1
2002 7 1
2003 9 2
2004 4 3
2005 6 3
2006 5 3
2007 6 3
2008 4 3
2009 8 4
2010 7 1
2011 4 5
2012 4 5
2013 6 2
2014 0 2
2015 3 3
2016 5 5
2017 4 4
2018 8 5
t<-table(dat$yr)
1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
6 10 4 22 17 16 16 12 5 6 8 11 7
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
9 8 9 7 12 8 9 9 8 2 6 10 8
2018
13
然后我尝试了:
df<- data.frame(t, t2)
head(df)
head(df)
Var1 Freq Var1.1. Var2 Freq.1
1 1992 6 1992 0 6
2 1993 10 1993 0 10
3 1994 4 1994 0 3
4 1995 22 1995 0 20
5 1996 17 1996 0 15
6 1997 16 1997 0 16
p<-ggplot(data=df, aes(x=Var1, y=Var2)) +
geom_bar(stat="identity")
p
将这些替换为数据集变量给我带来了更糟糕的结果,y 轴显示 "yr" 变量每年没有计数,并且每一列都一直填充到“1”范围的顶部.
同样,我想在每一年的列中获得一个带有二进制 "n" 的堆叠条形图,以显示应该与 y 轴上的 'yr' 计数相匹配的 0/1 总和。或者,我可以使用我在发布的第一个代码中获得的 ggplot 并在那里获得每年的总和,我也会这样做。
这真的非常接近。要是总分也高居榜首就完美了
包 sjPlot:
sjp.grpfrq(dat$yr, dat$n, bar.pos = c("stack"), show.values = TRUE, show.n = TRUE, show.prc = FALSE, title = NULL)
sjPlot 代码的主要问题是我无法更改图例标签。它显示 n= 0、1。我需要将其更改为具体。
非常感谢!
试试这个,看看这是不是你想要的?
ggplot(data=df, aes(x=Var1, y=Freq)) +
geom_bar(stat="identity")
已解决。
sjp.grpfrq(dat$yr, dat$n, bar.pos = c("stack"), legend.title = "Key", legend.labels = c("NN", "N"), show.values = TRUE, show.n = TRUE, show.prc = FALSE, show.axis.values = TRUE, 标题= "1992-2018")
我是 运行 R 版本 3.5.2 (2018-12-20) -- "Eggshell Igloo" 在 MacBook Pro 上,OS 10.14.2。
我尝试了几种方法来获取这些图。我的首选方法是尝试创建我的数据的堆叠条形图(随时间分组的因素,我的 x 轴和计数作为 y),每列中有一个二分变量计数 0,1 计数,因为它们与 y 上的计数相匹配轴。但是我很灵活。我有这段代码,如果我可以在上面叠加一个条形图会有所帮助。
ggplot(dat, aes(x=factor(yr),y=n, group=(n>0)))+
stat_summary(aes(color=(n>0)),fun.y=length, geom="line")+
scale_color_discrete("Key",labels=c("NN", "N"))+
labs(title= "1992-2018", x="Years",y="n")
使用我的完整数据集,我尝试了这个并且非常接近堆叠条形图,它为我提供了每个 "yr" 变量的正确计数,但是对于我的变量 "n" 它给了我一个连续范围 0-1.0.
p<-ggplot(data=dat, aes(x=dat$yr, y=n, fill=n)) +
+ geom_bar(stat="identity")
这是我最感兴趣的数据。我试图将其强制转换为 table 然后是数据框。
t2<- table(dat$yr, dat$n)
0 1
1992 6 0
1993 10 0
1994 3 1
1995 20 2
1996 15 2
1997 16 0
1998 16 0
1999 9 3
2000 5 0
2001 5 1
2002 7 1
2003 9 2
2004 4 3
2005 6 3
2006 5 3
2007 6 3
2008 4 3
2009 8 4
2010 7 1
2011 4 5
2012 4 5
2013 6 2
2014 0 2
2015 3 3
2016 5 5
2017 4 4
2018 8 5
t<-table(dat$yr)
1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
6 10 4 22 17 16 16 12 5 6 8 11 7
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
9 8 9 7 12 8 9 9 8 2 6 10 8
2018
13
然后我尝试了:
df<- data.frame(t, t2)
head(df)
head(df)
Var1 Freq Var1.1. Var2 Freq.1
1 1992 6 1992 0 6
2 1993 10 1993 0 10
3 1994 4 1994 0 3
4 1995 22 1995 0 20
5 1996 17 1996 0 15
6 1997 16 1997 0 16
p<-ggplot(data=df, aes(x=Var1, y=Var2)) +
geom_bar(stat="identity")
p
将这些替换为数据集变量给我带来了更糟糕的结果,y 轴显示 "yr" 变量每年没有计数,并且每一列都一直填充到“1”范围的顶部.
同样,我想在每一年的列中获得一个带有二进制 "n" 的堆叠条形图,以显示应该与 y 轴上的 'yr' 计数相匹配的 0/1 总和。或者,我可以使用我在发布的第一个代码中获得的 ggplot 并在那里获得每年的总和,我也会这样做。
这真的非常接近。要是总分也高居榜首就完美了
包 sjPlot:
sjp.grpfrq(dat$yr, dat$n, bar.pos = c("stack"), show.values = TRUE, show.n = TRUE, show.prc = FALSE, title = NULL)
sjPlot 代码的主要问题是我无法更改图例标签。它显示 n= 0、1。我需要将其更改为具体。
非常感谢!
试试这个,看看这是不是你想要的?
ggplot(data=df, aes(x=Var1, y=Freq)) +
geom_bar(stat="identity")
已解决。
sjp.grpfrq(dat$yr, dat$n, bar.pos = c("stack"), legend.title = "Key", legend.labels = c("NN", "N"), show.values = TRUE, show.n = TRUE, show.prc = FALSE, show.axis.values = TRUE, 标题= "1992-2018")