我有一个包含两列的数据框,' host'和' date&#39 ;;它描述了在七个月的特定日期对一些不同服务器的一系列网络攻击。
这是数据的样子,
> china_atks %>% head(100)
host date
1 groucho-oregon 2013-03-03
2 groucho-oregon 2013-03-03
...
46 groucho-singapore 2013-03-03
48 groucho-singapore 2013-03-04
...
groucho-oregon' groucho-signapore'等等,是攻击所针对的服务器的主机名。
大约有190,000条记录,涵盖2013年3月3日至2013年9月8日,例如
> unique(china_atks$date)
[1] "2013-03-03" "2013-03-04" "2013-03-05" "2013-03-06" "2013-03-07"
"2013-03-08" "2013-03-09"
[8] "2013-03-10" "2013-03-11" "2013-03-12" "2013-03-13" "2013-03-14"
"2013-03-15" "2013-03-16"
[15] "2013-03-17" "2013-03-18" "2013-03-19" "2013-03-20" "2013-03-21"
"2013-03-22" "2013-03-23"
...
我想创建一个多行时间序列图表,可以显示每个服务器每天在日期范围内收到的攻击次数,但我无法弄清楚如何将数据传递给ggplot实现这一目标。有九个独特的主机名,因此图表将显示九行。
谢谢!
答案 0 :(得分:3)
这是实现此目的的一种方法。
首先按日期汇总计数频率。
library(plyr)
df <- plyr::count(da,c("host", "date"))
然后进行绘图。
ggplot(data=df, aes(x=date, y=freq, group=1)) +
geom_line(aes(color = host))
数据强>
da <- structure(list(host = structure(1:4, .Label = c("groucho-eu",
"groucho-oregon", "groucho-singapore", "groucho-tokyo"), class = "factor"),
date = structure(c(1L, 1L, 1L, 1L), .Label = "2013-03-03", class = "factor"),
freq = c(1L, 4L, 2L, 1L)), .Names = c("host", "date", "freq"
), row.names = c(NA, -4L), class = "data.frame")
答案 1 :(得分:3)
ggplot2
库能够执行统计信息。因此,一个选项可能是让ggplot
处理计数/频率。这应绘制多条线(每组一条)
ggplot(df, aes(x=Date, colour = host, group = host)) + geom_line(stat = "count")
注意:确保将host
转换为factor
以使行具有离散颜色。