我有一个包含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中的数据转换为其他内容?如果是这样,它是什么?
答案 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
你对间隔直方图的描述让我想起了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