ggplot2 или sjPlot сумма столбцов столбцов с накоплением

Я использую R версии 3.5.2 (20.12.2018) - «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")

Это данные, которые меня больше всего интересуют. Я попытался затем преобразовать их в таблицу, а затем в фрейм данных.

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" в каждом столбце года, чтобы показать сумму 0/1, которая должна соответствовать количеству лет на оси y. или я могу использовать 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. Мне нужно изменить это, чтобы быть конкретным.

Большое спасибо заранее!


person Афанасия Геннадьевна    schedule 24.03.2019    source источник


Ответы (2)


Попробуйте это и посмотрите, хотите ли вы этого?

ggplot(data=df, aes(x=Var1, y=Freq)) +
   geom_bar(stat="identity")
person J.Li    schedule 24.03.2019
comment
Нет, к сожалению! это также дает мне неправильный диапазон по оси Y для счетчиков, что является нечетным. Он не сообщает мне в каждом столбце, какое количество переменных n или Var2 для каждого уровня (0,1). знак равно - person Афанасия Геннадьевна; 24.03.2019

Решено.

sjp.grpfrq (dat $ yr, dat $ n, bar.pos = c ("стек"), legend.title = "Key", legend.labels = c ("NN", "N"), show.values ​​= ИСТИНА, show.n = ИСТИНА, show.prc = ЛОЖЬ, show.axis.values ​​= ИСТИНА, title = "1992-2018")

person Афанасия Геннадьевна    schedule 24.03.2019