R - ggplot - исключить значение и сохранить исходное соотношение на графике - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь создать барплот с помощью 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

И вот что я пытался исключить 0, но я не знаю, как сохранить информацию о пропущенном значении 0 (80% данных).Поэтому вместо 100% на верхней метке Y я пытаюсь получить (1 - (% count == 0)) enter image description here

А также сгруппировать счет>= 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")

1 Ответ

1 голос
/ 10 апреля 2019

Вы можете установить цвет нулевого счета прозрачным.Таким образом, вам вообще не нужно изменять data.frame.

Используя найденную удобную gg_color_hue -функцию здесь , вы можете сделать это:

gg_color_hue <- function(n) {
  hues = seq(15, 375, length = n + 1)
  hcl(h = hues, l = 65, c = 100)[1:n]
}

counts <- unique(all_df$count)
counts <- counts[-which(counts==0)]
colors <- c('transparent', gg_color_hue(length(counts)))

#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) + 
  scale_fill_manual(values=colors, breaks=counts)

enter image description here

...