什么是这种类型的图表,你如何在R中绘制它?

时间:2015-09-24 06:17:32

标签: r graph cumulative-line-chart

http://imgur.com/IfVyu6f

我认为它会被称为累积并发现累积频率图和累积流程图。但是,我不认为图像中的图形也不是,因为累积图形从0开始,但我的变量不是。此外,密度图听起来最接近,但它是1区域的分布,但我想显示频率。

基本上,变量是主变量的子部分,我想显示这些子变量何时收敛以创建峰值。实质上,这些变量总和显示累积界限。

2 个答案:

答案 0 :(得分:1)

使用ggplot2您可以使用geom_area()功能

library(ggplot2)
library(gcookbook) # For the data set

ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) + geom_area()

答案 1 :(得分:1)

感谢您分享有关数据外观的更多信息。

让我们使用休斯顿警察局的公开犯罪统计数据作为例子。在这种情况下,我们会使用2015年1月份的数据集。

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')

ggplot density method

另一种方法是使用R table()和reshape2&#39; 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()

preformatted table method