Я пытаюсь создать барплот с помощью ggplot.
Итак, у меня есть несколько фреймов данных (пример данных ниже).
В этом фрейме данных у меня есть столбец "count".Но у меня много подсчета == 0.
Поэтому я пытаюсь составить график из моих данных, исключить 0 в визуализации, но сохранить исходный процент.
Например, еслиУ меня есть 80% от 0 в моих данных. Я хочу построить только значение! = 0, но оставить метку Y на 20% (например, я могу легко визуализировать свои данные и хранить информацию о значении 0).Если у вас есть лучшее предложение для представления моих данных, я открыт для предложения.
Другая моя проблема заключается в том, что я хочу объединить несколько групп "считать".Это означает, что я хочу в моем графике count = 1, count = 2, count> = 3, и я не знаю, как это получить.Я думал, может быть, сделать матрицу подсчета?
Вот пример данных:
#Stackoverflow example
data1=data.frame(count=c(rep(0,70),rep(1,15),rep(2,10),rep(3,3),5,7))
data2=data.frame(count=c(rep(0,140),rep(1,30),rep(2,20),rep(3,6),5,5,7,7))
data3=data.frame(count=c(rep(0,120),rep(1,20),rep(2,7),5,7,9))
data1$var="first"
data2$var="second"
data3$var="third"
all_df=rbind(data1,data2,data3)
#Plot all values : Plot 1
ggplot(all_df) +
geom_bar(aes(x = var, fill = as.factor(count)), position = "fill")+
scale_y_continuous(labels=scales::percent)
#Plot value greater than 0 : Plot 2
ggplot(all_df[which(all_df$count>0),]) +
geom_bar(aes(x = var, fill = as.factor(count)), position = "fill")+
scale_y_continuous(labels=scales::percent)
Так вот, что я получил со всеми данными ![all_value](https://i.stack.imgur.com/5tpgm.png)
И вот что я пытался исключить 0, но я не знаю, как сохранить информацию о пропущенном значении 0 (80% данных).Поэтому вместо 100% на верхней метке Y я пытаюсь получить (1 - (% count == 0)) ![enter image description here](https://i.stack.imgur.com/rfIOa.png)
А также сгруппировать счет>= 3, поэтому вместо этого все в легенде: 1,2,3,5,7,9.Я хочу 1,2,> = 3
. Для этого я собирался создать таблицу подсчета в новом фрейме данных.Поэтому в моих данных сделайте сумму count = 0, count = 1, count = 2, count> = 3, сделайте это для всех разных фреймов данных, но потом ... я не знаю ... Пример того, что я пыталсяниже.
count_df=function(a,b,c){
data.frame(first=c(sum(a$count==0),sum(a$count==1),sum(a$count==2),sum(a$count>=3)),
second=c(sum(b$count==0),sum(b$count==1),sum(b$count==2),sum(b$count>=3)),
third=c(sum(c$count==0),sum(c$count==1),sum(c$count==2),sum(c$count>=3)))
}
count_table=count_df(data1,data2,data3)
rownames(count_table)=c("0","1","2","=<3")