Затенение (или альфа) коробчатых диаграмм по количеству точек данных с помощью ggplot2 в R

У меня есть набор столбчатых данных, с помощью которого я строю серию коробчатых диаграмм, наиболее похожих на настройку в этом примере: Ящик для таблицы с использованием ggplot2

require(reshape2)
ggplot(data = melt(dd), aes(x=variable, y=value)) + geom_boxplot(aes(fill=variable))

Однако в моем случае каждая из коробчатых диаграмм представляет разное количество точек данных. Например, в столбце A может быть 8000 точек данных, в столбце B - 6000, в столбце C - 2500, а в столбце D - 800.

Чтобы передать это, я подумал, что могу изменить цвет заливки поля, чтобы отразить количество точек данных. Чем темнее прямоугольник, тем больше точек данных было использовано при вычислении статистики, которую представляет прямоугольная диаграмма.

В файле справки ggplot2 для geom_histogram они используют aes (fill = .. count ..) для затенения интервалов, соответствующих количеству отсчетов в интервале.

m <- ggplot(movies, aes(x=rating))    
m + geom_histogram(aes(fill=..count..))

(Хотел включить сюда изображение гистограммы, но не могу, потому что у меня недостаточно очков репутации ... извините)

Я пробовал использовать это с моим ggplot geom_boxplot, но, похоже, он не знает части ..count ... Вот моя строка, которая генерирует коробчатую диаграмму:

ggplot(meltedData, aes(x=variable, y=value)) + geom_boxplot(aes(fill=variable), outlier.size = 1) + ylim(-4,3)

У кого-нибудь есть указатели? Я знаю, что могу добавить свойство «alpha» к geom_boxplot, но как я могу применить его к каждому блочному графику индивидуально в зависимости от количества точек данных в блочном графике?

Заранее спасибо.


person Saket Vora    schedule 16.07.2013    source источник
comment
не могли бы вы предоставить воспроизводимый пример столбцов, которые вы ' ты пытаешься построить заговор?   -  person canary_in_the_data_mine    schedule 16.07.2013
comment
Я не очень хорошо знаю всю ..count.. систему, но думаю, что она работает с гистограммами из-за аргумента stat="bin". Возможно, вам придется просто добавить count к самим данным.   -  person Señor O    schedule 16.07.2013


Ответы (3)


stat_boxplot не подсчитывает количество. Просто сделайте это за пределами ggplot2:

library(plyr)
DF <- ddply(mtcars, .(cyl), transform, myalpha = length(cyl))

library(ggplot2)
ggplot(DF, aes(factor(cyl), mpg)) + 
  geom_boxplot(aes(alpha = myalpha), fill = "blue") 

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

person Roland    schedule 16.07.2013

data.table вариант:

dd <- data.table(dd)
dd[,Count:=.N,by=variable]
person Señor O    schedule 16.07.2013
comment
Конечно. Что вы имеете в виду по крайней мере? - person Señor O; 16.07.2013
comment
Я просто не вижу необходимости перечислять все возможности для этого каждый раз, когда в ответе требуется разделение-применение-комбинирование. Нам действительно нужен хороший FAQ, дающий все возможности. Я выбрал plyr здесь, потому что я уже был во вселенной Хадли. - person Roland; 16.07.2013

Моя версия решения Роланда с использованием пакета dplyr:

library(dplyr)
library(ggplot2)

df <- mtcars %>%
  group_by(cyl) %>%
  mutate(my_alpha = length(cyl))

ggplot(df, aes(factor(cyl), mpg)) +
  geom_boxplot(aes(alpha = my_alpha), fill = 'blue')
person Tiana    schedule 17.02.2019