如何生成Google Analytics的访问者stream量图表/图表?
我正在尝试生成一个与最近Google Analytics(分析)访问者stream程类似的图表。 这些也被称为冲积图 。
我可以使用基于Web或非Web的解决scheme,只要我可以自己运行它。
我想要显示的数据如下:
- 在t1时刻,我有x1个单位,分成n1个部分
- 在时刻t2,n1个部分以x2个单位分割(或合并)成n2个部分
- 我想显示拆分/合并的地方。
我的数据目前在NetworkX中用DiGraph表示,但这可能是不相关的,因为我可以以任何所需的格式输出数据。
我认为这是一个有趣的问题,所以我用d3做了一个冲积图的例子: http : //nickrabinowitz.com/projects/d3/alluvial/alluvial.html
而且,因为D3在animation方面非常出色,而且我觉得它看起来很酷,所以我制作了一个animation版本: http : //nickrabinowitz.com/projects/d3/alluvial/alluvial-dynamic.html
这并不包括你可能想要的一切,但希望能提供一些基础。 在开始的大块代码只是伪造数据 – 你可以用你的真实数据replace它,或使用d3.json
加载它。 预期的格式类似于d3期望的networking图的DOM节点结构:
{ // list of time slots t1 through tn times: [ // list of t1 nodes [ { nodeName: "Node 1", id: 1, nodeValue: 24332 }, // etc ... ], // etc ... ], // list of all links links: [ { source: 1, // id of source node target: 5, // id of target node value: 3243 }, // ... etc ] }
我希望这是有帮助的 – 这不是一个典型的SO响应,而且可能需要一定量的工作来定制您的需求,但我认为这可能是有用的。
考虑R中的平行坐标图
![赛马平行坐标图] [1]
df <- structure(list(Horse = structure(c(11L, 16L, 13L, 15L, 3L, 18L, 10L, 17L, 19L, 8L, 5L, 9L, 1L, 4L, 12L, 2L, 14L, 7L, 6L), .Label = c("Advice", "Atomic Rain", "Chocolate Candy", "Desert Party", "Dunkirk", "Flying Private" , "Friesan Fire", "General Quarters", "Hold Me Back", "Join in the Dance", "Mine That Bird", "Mr. Hot Stuff", "Musket Man" , "Nowhere to Hide", "Papa Clem", "Pioneer of the Nile", "Regal Ransom", "Summer Bird", "West Side Bernie") , class = "factor") , X1.4 = c(19L, 3L, 8L, 5L, 17L, 16L, 1L, 2L, 13L, 12L, 9L, 14L, 15L, 4L, 18L, 10L, 11L, 6L, 7L) , X1.2 = c(19L, 3L, 8L, 4L, 12L, 16L, 1L, 2L, 17L, 13L, 10L, 5L, 15L, 6L, 18L, 9L, 14L, 7L, 11L) , X3.4 = c(19L, 4L, 7L, 3L, 15L, 16L, 1L, 2L, 14L, 11L, 9L, 6L, 17L, 5L, 18L, 10L, 12L, 8L, 13L) , X1m = c(12L, 2L, 7L, 4L, 8L, 15L, 1L, 3L, 17L, 10L, 11L, 5L, 13L, 6L, 16L, 9L, 18L, 14L, 19L) , Str = c(1L, 2L, 4L, 3L, 7L, 9L, 5L, 6L, 13L, 10L, 12L, 8L, 14L, 11L, 16L, 15L, 18L, 17L, 19L) , Finish = 1:19), .Names = c("Horse", "X1.4", "X1.2", "X3.4", "X1m", "Str", "Finish") , class = "data.frame", row.names = c(NA, -19L)) library(ggplot2) df$Horse <- with(df, reorder(Horse, Finish)) dfm <- melt(df) #add a volume metric dfm$volume <- ifelse(dfm$variable == "X1.4" & dfm$value <= 6,6, ifelse(dfm$variable == "X1.4" & dfm$value > 6 & dfm$value <= 12,6, ifelse(dfm$variable == "X1.4" & dfm$value > 12,7,1))) dfm$volume <- ifelse(dfm$variable == "X1.2" & dfm$value <= 9,9, ifelse(dfm$variable == "X1.2" & dfm$value > 9 & dfm$value<= 14,5, ifelse(dfm$variable == "X1.2" & dfm$value > 14,5,dfm$volume))) dfm$volume <- ifelse(dfm$variable == "X3.4" & dfm$value <= 3,3, ifelse(dfm$variable == "X3.4" & dfm$value > 3 & dfm$value <= 19,1,dfm$volume)) #Alter the race for some neck to neck action dfm$value <- ifelse(dfm$variable == "X1.4" & dfm$value <= 6,4, ifelse(dfm$variable == "X1.4" & dfm$value > 6 & dfm$value <= 12,8,dfm$value)) dfm$value <- ifelse(dfm$variable == "X1.2" & dfm$value <= 9,5, ifelse(dfm$variable == "X1.2" & dfm$value > 9 & dfm$value <= 14,11,dfm$value)) dfm$value <- ifelse(dfm$variable == "X3.4" & dfm$value <= 3,2, ifelse(dfm$variable == "X3.4" & dfm$value > 3 & dfm$value <= 19,11,dfm$value)) p <- ggplot(dfm, aes(factor(variable), value, group = Horse, colour = Horse, label = Horse)) p1 <- p + geom_line(aes(size = volume), labels = labels) + geom_text(data = subset(dfm,variable == "Finish"), aes(x = factor(variable + 0.5)), size = 3.5, hjust = 0.8) labels <- c(expression(1/4), expression(1/2),expression(3/4), "1m", "Str", "Finish","") p1 + theme_bw() + opts(legend.position = "none", panel.border = theme_blank(), axis.ticks = theme_blank()) + scale_x_discrete(breaks = c(levels(dfm$variable), ""), labels = labels) + scale_y_continuous(breaks = NA, trans = "reverse") + xlab(NULL) + ylab(NULL) # Credit and other notes: # http://learnr.wordpress.com/2009/05/06/ggplot2-bump-chart/ # ![enter image description here][1]http://had.co.nz/ggplot/plot-templates.html Parallel coordinates plot