将时间跨度可视化为水平直方图/条形图

时间:2014-11-14 17:03:44

标签: r data-visualization histogram

我有一个包含6个事件的csv表及其发生的时间跨度。我的变量是开始日期,结束日期和事件ID。我打算创建一个水平直方图/条形图可视化,显示时间范围,即某些类型的事件持续多长时间。 X轴应该具有多年的日期,并且Y轴应该具有不同种类的事件ID。理想情况下,我想在时间跨度的长度上使用水平条。一个事件有一个以上的时间跨度。事件开始,然后结束。几个月后它开始,持续一段时间并再次结束。我有大约6个事件ID,它们有很多不同的事件。我只是希望在时间轴上看到出现概述......

编辑: 该表看起来像这样:

Begin      End          EventID
01.01.2000 01.05.2000   Chicago
03.04.1998 03.09.1999   New York
12.03.2014 16.07.2014   Los Angeles
12.12.2003 03.06.2004   Amsterdam
21.06.1993 14.12.1993   Paris
27.02.1995 15.03.1995   London
14.06.2002 15.06.2002   Madrid

我尝试了以下代码:

cities <- read.table(textConnection("Begin End EventID
01.01.2000 01.05.2000   Chicago
03.04.1998 03.09.1999   New York
12.03.2014 16.07.2014   Los Angeles
12.12.2003 03.06.2004   Amsterdam
21.06.1993 14.12.1993   Paris
27.02.1995 15.03.1995   London
14.06.2002 15.06.2002   Madrid
"), sep=" ", header=TRUE)

cities$Begin<- as.Date(cities$Begin, "%d.%m.%Y")
cities$End<- as.Date(cities$End, "%d.%m.%Y")
cities$EventID<- as.factor(cities$EvenID)
cities$Sep <- as.factor(1:length(cities$Begin))

library(ggplot2)

p <- ggplot(data=cities) + geom_segment(aes(x=Begin, xend=End, y=EventID, yend=EventID, 
group=Sep), size=12)

有关:

cities$EventID<- as.factor(cities$EvenID) 

我收到一条错误消息,因为EventID不包含整数。

Error in `$<-.data.frame`(`*tmp*`, "EventID", value = integer(0)) : 
Replacement has 0 rows. Data has 75

我是否必须将EventID中的数据转换为其他内容?如果是这样,它是什么?

1 个答案:

答案 0 :(得分:2)

以下是我认为您想要使用ggplot2包的示例。语法使这个图表易于构建(复制数据需要更多代码!)

Lines <- read.table(textConnection("Begin End EventID
01.01.2000 01.05.2000 1
03.04.1998 03.09.1999 1
12.03.2014 16.07.2014 2
12.12.2003 03.06.2004 3
21.06.1993 14.12.1993 2
27.02.1995 15.03.1995 3
14.06.2002 15.06.2002 2
"), sep=" ", header=TRUE)

Lines$Begin <- as.Date(Lines$Begin, "%d.%m.%Y")
Lines$End <- as.Date(Lines$End, "%d.%m.%Y")
Lines$EventID <- as.factor(Lines$EventID)
Lines$Sep <- as.factor(1:length(Lines$Begin))

library(ggplot2)

p <- ggplot(data=Lines) + 
     geom_segment(aes(x = Begin, xend = End, y = EventID, yend = EventID, group=Sep)
     ,size =12)
p

enter image description here

你对间隔直方图的描述让我想起了this,但这似乎不是你要问的。


使用更新后的代码,只是造成问题的拼写错误。以下是您的新数据的示例(修改了read.table以及将EventID转换为因子时的拼写错误。)

在这里,我还根据最顶层的日期对情节进行了分类。请注意,在此示例中,您实际上不需要Sep分组变量,因为您没有同一城市的多个时间跨度。

cities <- read.table(textConnection("Begin End EventID
01.01.2000 01.05.2000 Chicago
03.04.1998 03.09.1999 New_York
12.03.2014 16.07.2014 Los_Angeles
12.12.2003 03.06.2004 Amsterdam
21.06.1993 14.12.1993 Paris
27.02.1995 15.03.1995 London
14.06.2002 15.06.2002 Madrid
"), sep=" ", header=TRUE)

cities$Begin <- as.Date(cities$Begin, "%d.%m.%Y")
cities$End <- as.Date(cities$End, "%d.%m.%Y")
cities$EventID <- gsub("_"," ",cities$EventID)
cities$EventID <- as.factor(cities$EventID)
cities$Sep <- as.factor(1:length(cities$Begin))

#sorting levels so earliest is at top of graph
cities <- transform(cities, EventID=reorder(EventID, -rank(Begin)))

p <- ggplot(data=cities) + 
     geom_segment(aes(x=Begin, xend=End, y=EventID, yend=EventID, group=Sep), size=12)
p 

enter image description here