Изменение шкалы оси Y на счетчики с использованием нескольких цветовых шкал на столбчатой ​​диаграмме с накоплением

У меня есть df, как показано ниже:

fruit <- data.frame(Sample=1:100, 
            Fruit=c(rep("Apple", 10), rep("Strawberry", 25), rep("Grape", 20), 
                  rep("Watermelon", 15), rep("Lime", 11), rep("Blueberry", 10), 
                  rep("Plum", 9)), 
            Color=c(rep("Red", 30), rep("Green", 45), 
                    rep("Blue", 25)), 
            Ripe=c(rep(c(T, F), 50)))+
fruit$Fruit <- factor(fruit$Fruit, unique(fruit$Fruit))+
fruit$Color <- factor(fruit$Color, unique(fruit$Color))

Затем я построил гистограмму как:

library(ggplot2)
ggplot(fruit, aes(Color)) +
geom_bar(stat="count", position="fill",aes(fill=Color, color=Color,alpha=Ripe)) +
scale_y_continuous(labels=scales::percent)+
scale_alpha_discrete(range=c(1,0.6))+
theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())+
scale_color_manual(values = c("Black", "Black", "Black"))+
guides(fill = guide_legend(override.aes = list(colour = NA)))

И вот результат:

введите здесь описание изображения

Что хотелось бы получить, так это шкалу оси Y как количество наблюдений от переменной цвета, а не частоту (проценты).

С ответом, который @PoGibas дал ниже, я смог поместить общее количество наблюдений для каждого цвета над каждой полосой ... но мне интересно, знаете ли вы, как поместить общее n наблюдений для ИСТИНА в каждой цветной полосе. В этом случае будет два наблюдения n для каждой полосы, одно над полосой будет означать общее n каждого цвета, а над полосой ИСТИНА будет наблюдение ИСТИНА n для этого конкретного цвета ...


person guidebortoli    schedule 27.01.2018    source источник


Ответы (2)


Ваш ggplot2 код несколько усложнен. Вы должны удалить scale_y_continuous(labels = scales::percent), чтобы избавиться от процентов. И удалите stat = "count", position = "fill", чтобы получить количество наблюдений (т. Е. Используйте простой geom_bar()).

# Using OPs data
library(ggplot2)
ggplot(fruit, aes(Color, fill = Color, alpha = Ripe)) +
    geom_bar(color = "black") +
    scale_alpha_discrete(range = c(1, 0.6)) +
    theme(axis.title.x = element_blank(), 
          axis.text.x = element_blank(), 
          axis.ticks.x = element_blank()) +
    guides(fill = guide_legend(override.aes = list(colour = NA)))

введите здесь описание изображения

Кроме того, вы указываете color = Color, а затем перезаписываете его на scale_color_manual(values = c("Black", "Black", "Black"))

person pogibas    schedule 27.01.2018
comment
Большой! Работает как шарм. Я знал, что проблема в некоторой степени связана с scale_y_continuous (labels = scale :: percent), но я не знал, как это исправить. Спасибо! - person guidebortoli; 27.01.2018
comment
@guidebortoli рад помочь! - person pogibas; 27.01.2018
comment
как насчет отображения количества наблюдений за переменной цвета над каждой полосой? Я попробовал этот код здесь geom_text(stat = "count", aes(label = ..count.., y = ..count..), color = "black",vjust = -1.6, size = 4.3), и он показал мне также значения de Ripe ... но тоже была проблема с vjust - person guidebortoli; 27.01.2018
comment
@guidebortoli Я бы добавил его как отдельный набор данных (ИМХО, проще оставить черчение для ggplot2 и делать все вычисления вне него); Создать набор данных счетчика: foo <- aggregate(Sample ~ Color, data = fruit, FUN = length); Добавьте к своему сюжету: geom_text(data = foo, aes(label = Sample, y = Sample), alpha = "1", vjust = -1). Сообщите мне, если это сработает. - person pogibas; 27.01.2018

вы также можете использовать stat_count

ggplot(fruit,aes(Color)) +
    stat_count(aes(x=Color,fill=Color, color=Color,alpha=Ripe),geom = "bar",position = "stack")+
    scale_y_continuous()+scale_alpha_discrete(range=c(1,0.6))+
    theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())+
    scale_color_manual(values = c("Black", "Black", "Black"))+
    guides(fill = guide_legend(override.aes = list(colour = NA)))

введите здесь описание изображения

person Antonis    schedule 27.01.2018