Спасибо за обмен немного больше о том, что выглядят ваши данные как.
В качестве примера воспользуемся общедоступными данными статистики преступлений из Департамента полиции Хьюстона. В этом случае мы используем набор данных в течение месяца января, 2015.
library(ggplot2)
crime <- gdata::read.xls('http://www.houstontx.gov/police/cs/xls/jan15.xls')
# There's a single case in there where the offense type is called '1',
# that doesn't make sense to us so we'll remove it.
crime <- crime[!crime$Offense.Type == '1', ]
crime$Offense.Type <- droplevels(crime$Offense.Type)
Есть 10 колонок, но те из них мы находимся заинтересованы в выглядеть следующим образом:
# Hour Offense.Type
# 8 Auto Theft
# 13 Theft
# 5 Auto Theft
# 13 Theft
# 18 Theft
# 18 Theft
Как вы упомянули, проблема в том, что каждая строка является единственным инцидентом. Нам нужен способ получить частоты в час, чтобы пройти до geom_area()
.
Первый способ - позволить ggplot2 обрабатывать его, нет необходимости предварительно форматировать данные.
p <- ggplot(crime, aes(x=Hour, fill=Offense.Type))
p + geom_area(aes(y = ..count..), stat='density')
Другой способ заключается в предварительно отформатированные таблицы частот, используя R-х table()
и reshape2-х melt()
:
library(reshape2)
crime.counts <- table(crime$Hour, crime$Offense.Type)
crime.counts.l <- melt(crime.counts,
id.vars = c('Hour'),
value.name = "NumberofCrimes")
names(crime.counts.l) <- c("Hour", "Offense.Type", "numberOfCrimes")
p <- ggplot(crime.counts.l, aes(x = Hour,
y = numberOfCrimes,
fill = Offense.Type))
p + geom_area()
Это называется ** стек область ** диаграмма , См. Этот ответ здесь: http://stackoverflow.com/questions/4651428/making-a-stacked-area-plot-using-ggplot2 – neerajt
Спасибо. Кажется, это очень близко к тому, что мне нужно. Но вместо плотности мне нужна ось Y для отображения частот. –
Возможно, это может помочь http://stackoverflow.com/questions/18519243/ggplot-legend-key-color-and-items – Keniajin