Charts dimple.js:时间段不相等且缺少标签

Charts dimple.js:时间段不相等且缺少标签,charts,data-visualization,dimple.js,Charts,Data Visualization,Dimple.js,我有一个数据点之间周期不均匀的日期数据系列。我想为序列中的每个数据点设置一个标签。你知道怎么归档吗 <div id="volumeReport"> <script> var svg = dimple.newSvg("#volumeReport", 590, 500); var data = [ {"Date": "22/7/2014", "Volume" : 0}, {"Date": "15/11/2014", "Volume"

我有一个数据点之间周期不均匀的日期数据系列。我想为序列中的每个数据点设置一个标签。你知道怎么归档吗

  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>

Fiddle link是一个类别轴,它将沿该轴均匀地分隔日期:

myChart.addCategoryAxis("Date");
  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>
看起来您还试图使用需要dimple版本2.1的阶梯面积图。我已经更新了小提琴中的版本:

  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>

类别轴将沿轴均匀地隔开日期:

myChart.addCategoryAxis("Date");
  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>
看起来您还试图使用需要dimple版本2.1的阶梯面积图。我已经更新了小提琴中的版本:

  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>

为了让我的评论成为一个答案,完成任务的一种方法是更严格地控制轴心国。我更新了John的JSFIDLE以演示如何做到这一点。完整的独立代码在下面和中

  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>

  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>

var svg=dimple.newSvg(“卷报告”,590500);
风险值数据=[
{“日期”:“2014年7月22日”,“卷”:0},
{“日期”:“2014年11月15日”,“卷数:1000},
{“日期”:“2015年1月5日”,“卷号:2000},
{“日期”:“2015年5月2日”,“卷数:3000},
{“日期”:“2015年3月31日”,“卷数:4000}
];
var myChart=new dimple.chart(svg,数据);
myChart.setBounds(60,30,510,305)
var x=myChart.addTimeAxis(“x”、“日期”、%d-%m-%Y%H:%m:%S:%L”、%d-%m-%Y”);
x、 addOrderRule(“日期”);
x、 timeField=“日期”;
x、 dateParseFormat=“%d/%m/%Y”;
myChart.addMeasureAxis(“y”、“体积”);
var s=myChart.addSeries(null,dimple.plot.area);
s、 插值=“步”;
s、 线宽=1;
s、 lineMarkers=true;
myChart.draw();
myChart.axes[0].shapes.call(
d3.svg.axis()
.orient(“底部”)
.刻度(myChart.轴[0]。\u刻度)
.dickvalues(data.map)(函数(d,i){
返回d3.time.format(“%d/%m/%Y”).parse(d.Date)
})
)
.tickFormat(d3.time.format(“%d-%m-%Y”))
)

为了让我的评论成为一个答案,完成任务的一种方法是更严格地控制轴心国。我更新了John的JSFIDLE以演示如何做到这一点。完整的独立代码在下面和中

  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>

  <div id="volumeReport">

  <script>
    var svg = dimple.newSvg("#volumeReport", 590, 500);
    var data = [
    {"Date": "22/7/2014", "Volume" : 0},
    {"Date": "15/11/2014", "Volume" : 1000},
    {"Date": "5/01/2015", "Volume" : 2000},
    {"Date": "5/2/2015", "Volume" : 3000},
    {"Date": "31/3/2015", "Volume" : 4000}
    ];
    var myChart = new dimple.chart(svg, data);
    myChart.setBounds(60, 30, 510, 305)
    var x = myChart.addTimeAxis("x", "Date", "%d-%m-%Y %H:%M:%S:%L", "%d-%m-%Y");
    x.addOrderRule("Date");
    x.timeField = "Date";
    x.dateParseFormat = "%d/%m/%Y";
    myChart.addMeasureAxis("y", "Volume");
    var s = myChart.addSeries(null, dimple.plot.area);
    s.interpolation = "step";
    s.lineWeight = 1;
    s.lineMarkers = true;
    myChart.draw();

    myChart.axes[0].shapes.call(
      d3.svg.axis()
        .orient("bottom")
        .scale(myChart.axes[0]._scale)
        .tickValues(data.map(function(d,i){
            return d3.time.format("%d/%m/%Y").parse(d.Date)
          })
        )
        .tickFormat(d3.time.format("%d-%m-%Y"))
    )
  </script>

</html>

var svg=dimple.newSvg(“卷报告”,590500);
风险值数据=[
{“日期”:“2014年7月22日”,“卷”:0},
{“日期”:“2014年11月15日”,“卷数:1000},
{“日期”:“2015年1月5日”,“卷号:2000},
{“日期”:“2015年5月2日”,“卷数:3000},
{“日期”:“2015年3月31日”,“卷数:4000}
];
var myChart=new dimple.chart(svg,数据);
myChart.setBounds(60,30,510,305)
var x=myChart.addTimeAxis(“x”、“日期”、%d-%m-%Y%H:%m:%S:%L”、%d-%m-%Y”);
x、 addOrderRule(“日期”);
x、 timeField=“日期”;
x、 dateParseFormat=“%d/%m/%Y”;
myChart.addMeasureAxis(“y”、“体积”);
var s=myChart.addSeries(null,dimple.plot.area);
s、 插值=“步”;
s、 线宽=1;
s、 lineMarkers=true;
myChart.draw();
myChart.axes[0].shapes.call(
d3.svg.axis()
.orient(“底部”)
.刻度(myChart.轴[0]。\u刻度)
.dickvalues(data.map)(函数(d,i){
返回d3.time.format(“%d/%m/%Y”).parse(d.Date)
})
)
.tickFormat(d3.time.format(“%d-%m-%Y”))
)

数据点之间的距离不相等,我希望保留以前的值,直到出现新值。我已经用更合理的值更新了fiddle:在这种情况下,我认为这只是版本错了,这是您想要的吗(这是您在v2.1中运行的原始代码)如果您希望在x轴上为每个点设置标签,而不是以固定的间隔设置标签,恐怕库无法做到这一点。是否可以通过迭代dimple.series.shapes并使用d3来对其进行归档?或者,您可以这样做,数据点之间的距离不相等,我希望保留以前的值,直到新的一个出现了。我已经用更合理的值更新了fiddle:在这种情况下,我认为这只是版本错了,这是您想要的吗(这是您在v2.1中运行的原始代码)如果您希望在x轴上为每个点设置标签,而不是以固定的间隔设置标签,恐怕库无法做到这一点。是否可以通过迭代dimple.series.shapes并使用d3来对其进行归档?或者您也可以这样做