首页 > 解决方案 > ggplot2 或 sjPlot 和堆积条形图列

问题描述

我在 MacBook Pro、OS 10.14.2 上运行 R 版本 3.5.2(2018-12-20)——“Eggshell Igloo”。

我尝试了几种方法来获取这些图。我的首选方法是尝试创建我的数据的堆叠条形图(因子随时间分组,我的 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")

这是我最感兴趣的数据。然后我尝试将其强制转换为表格,然后转换为数据框。

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。我需要将其更改为具体。

提前非常感谢!

标签: rggplot2sjplot

解决方案


试试这个,看看这是不是你想要的?

ggplot(data=df, aes(x=Var1, y=Freq)) +
   geom_bar(stat="identity")

推荐阅读