用d3 /折线图打破一条线

时间:2015-01-29 16:11:13

标签: r d3.js linechart rcharts

我尝试使用R库复制以下使用ggplot2' rCharts/d3获得的图表(数据框df定义得更低) :

ggplot(data = df, aes(x = Year, y = value, 
    group = interaction(variable,Category), 
    colour = variable, shape = variable)) + geom_line() 

enter image description here

我无法通过变量的交互进行分组,就像ggplot示例一样:

nPlot(data = df, value ~ Year, 
    group = 'variable', 
    type = 'lineChart')

enter image description here

不幸的是,这两个系列的最后和第一点是相连的(在1870年到2010年之间),当然这是不可取的。用group = 'variable'之类的内容替换group = interaction(df$variable, df$Category)并没有给出任何有用的信息。

如何连接两个系列中的点?

这里有一个相关的 SO 问题Drawing non-continuous lines with d3,看起来是一个非常有前途的答案。但是来自rCharts并且不熟悉d3我无法根据我的情况调整那里提出的解决方案。

我尝试调整{em> SO 答案所基于的http://bl.ocks.org/mbostock/3035090此处的代码,但我对d3和{{不够熟悉1}}让它工作。我尝试做的是添加rCharts数据点而不显示NaN,这是我在上面的示例中所理解的。我没有成功,但无论如何这是我的尝试:

NaN

我尝试过其他变种但没有成功。我也尝试直接编辑html,但也失败了。

以下是复制图表的数据框:

df2 <- subset(df, Year %in% 1870)
df2$Year <- 1869  # add non-numeric entry at 1869 
                  # break the interpolation between 1870 and 2010?
df2$value <- NaN
df <- rbind(df, df2)
n <- nPlot(data = df, value ~ Year, group = 'variable', type = 'lineChart')
n$setTemplate(afterScript = 
  '<style>  # code snippet copied from Mike Bostock's example
  var line = d3.svg.line()
    .defined(function(d) { return !isNaN(d.dataValue); })
  </style>')
n

1 个答案:

答案 0 :(得分:2)

使用交互在数据框中创建一个新列,然后在nPlot中对该列进行分组,而不是在nPlot中进行交互,似乎可以解决这个问题:

df$interaction=interaction(df$variable,df$Category)
nPlot(data = df, value ~ Year, 
  group = 'interaction', 
  type = 'lineChart')

您可能需要更改图例