绘制具有可变长度分类数据的行

时间:2014-01-21 09:03:59

标签: r

我有数据代表特定事件发生的日期 集群中的节点。数据目前看起来像这样:

07-Jan-2013: node025 node061
14-Jan-2013: node025 node034 node061
21-Jan-2013: node025 node034 node050 node061
28-Jan-2013: node025 node034 node061
04-Feb-2013: node025 node034 node061
11-Feb-2013: node025 node034 node061
18-Feb-2013: node034
25-Feb-2013: node034
11-Mar-2013: node025

我想知道R中的哪种情节可以让我绘制出的名字 节点作为y轴上的因子与日期和输入日期的形式 应该在。

我试过搜索“可变长度行”和“多个y值”但是 找不到我要找的东西。有什么想法吗?

干杯

3 个答案:

答案 0 :(得分:3)

这是你在找什么?使用带有fill = T的read.table然后过滤掉空白

然后将数据融化以使其平坦

df<-read.table( text="07-Jan-2013: node025 node061
14-Jan-2013: node025 node034 node061
21-Jan-2013: node025 node034 node050 node061
28-Jan-2013: node025 node034 node061
04-Feb-2013: node025 node034 node061
11-Feb-2013: node025 node034 node061
18-Feb-2013: node034
25-Feb-2013: node034
11-Mar-2013: node025", fill=T)

require(reshape2)
flatdata<-melt(df,id.vars="V1")

# edit added the date format
ggplot(flatdata[flatdata$value != "",])+geom_point(aes(x=value,y=as.Date(V1, format="%d-%b-%Y"),color=variable),size=5,alpha=0.9) + coord_flip()

enter image description here

答案 1 :(得分:1)

df <- readLines(n=9)
07-Jan-2013: node025 node061
14-Jan-2013: node025 node034 node061
21-Jan-2013: node025 node034 node050 node061
28-Jan-2013: node025 node034 node061
04-Feb-2013: node025 node034 node061
11-Feb-2013: node025 node034 node061
18-Feb-2013: node034
25-Feb-2013: node034
11-Mar-2013: node025

df <- do.call(rbind.data.frame, lapply(strsplit(df, " "), function(row) {
  cbind(row[1], row[-1])
}))
df[,1] <- as.Date(df[,1], format="%d-%b-%Y:") 
plot(V2~V1, data=df) # defaults to spineplot()

enter image description here

答案 2 :(得分:1)

堆积条形图将执行此操作。

这是您的数据:

lines <- readLines(
  tc <- textConnection("07-Jan-2013: node025 node061
  14-Jan-2013: node025 node034 node061
  21-Jan-2013: node025 node034 node050 node061
  28-Jan-2013: node025 node034 node061
  04-Feb-2013: node025 node034 node061
  11-Feb-2013: node025 node034 node061
  18-Feb-2013: node034
  25-Feb-2013: node034
  11-Mar-2013: node025")
); close(tc)

我们将其拆分为有用的组件并重新排列为数据框。

split_lines <- strsplit(lines, ":? ")
dates <- as.Date(
  vapply(split_lines, head, character(1), n = 1),
  "%d-%b-%Y"
)
nodes <- lapply(split_lines, tail, n = -1)
n <- vapply(nodes, length, integer(1))

node_data <- data.frame(
  date = rep(dates, times = n),
  node = unlist(nodes, use.names = FALSE)
)

使用ggplot进行绘图非常简单。

library(ggplot2)

ggplot(node_data, aes(date, fill = node)) +
  geom_bar(binwidth = 1)

enter image description here