2016-09-28 73 views
0

我将图表的列类型设置为datetime,并在x轴之间添加了不需要的日期,其中包含大量空间,并将列的大小缩小至几乎不可见。具有日期时间类型列的静态x轴

[截屏1]:

enter image description here

如果我改变列到字符串类型,并且替换字符串数据,然后我得到这个[屏幕截图2]:

enter image description here

是否有一个选项可以排除与x轴时间相关的距离?基本上,我希望X轴的行为就好像它仍然是一个字符串类型。我希望条之间的静态距离,并保持日期时间类型,因为我需要它来设置过滤器。

任何人有任何想法,我怎么能做到这一点?

感谢

回答

1

日期根本就没有与ColumnChart

好工作,你可以尝试调整bar.groupWidth和其他选项,但似乎从来没有在release notes工作

,他们提到他们已经..

增加了用于指定bar.width,bar.gap,bar.group.width(是bar.groupWidth)和bar.group.gap的选项。

没有这些,似乎可以用一个材料图表变得有点接近这样的伎俩

,但仍显示许多日期在

但之间,如果你喜欢的图表的外观与type: 'string'

可以使用DataView绘制图表的基础上,从过滤器的值

下面的代码段创建DataView
第一列'string'转换,
和过滤基于过滤器选择的值的数据

var range = slider.getState(); 

    var dataView = new google.visualization.DataView(slider.getDataTable()); 

    dataView.setColumns([{ 
    calc: 'stringify', 
    sourceColumn: 0, 
    type: 'string' 
    }, 1, 2]); 

    dataView.setRows(dataTable.getFilteredRows([{ 
    column: 0, 
    minValue: range.lowValue, 
    maxValue: range.highValue 
    }])); 

参见下列工作段中,图绘制时滑块是'ready''statechange'

google.charts.load('current', { 
 
    callback: function() { 
 
    var dataTable = new google.visualization.DataTable({ 
 
     cols: [ 
 
     {label: 'Date', type: 'date'}, 
 
     {label: '+', type: 'number'}, 
 
     {label: '-', type: 'number'}, 
 
     ], 
 
     rows: [ 
 
     {c:[{v: new Date(2016, 2, 13)}, {v: null}, {v: -100}]}, 
 
     {c:[{v: new Date(2016, 3, 18)}, {v: 50}, {v: null}]}, 
 
     {c:[{v: new Date(2016, 4, 21)}, {v: 50}, {v: null}]}, 
 
     {c:[{v: new Date(2016, 5, 20)}, {v: null}, {v: -200}]}, 
 
     {c:[{v: new Date(2016, 6, 23)}, {v: 50}, {v: null}]}, 
 
     {c:[{v: new Date(2016, 7, 12)}, {v: 100}, {v: null}]}, 
 
     {c:[{v: new Date(2016, 8, 28)}, {v: 200}, {v: null}]}, 
 
     {c:[{v: new Date(2016, 8, 28)}, {v: null}, {v: -1000}]} 
 
     ] 
 
    }); 
 

 
    var options = { 
 
     title: 'Transaction Chart' 
 
    }; 
 

 
    var slider = new google.visualization.ControlWrapper({ 
 
     controlType: 'DateRangeFilter', 
 
     containerId: 'filter_div', 
 
     dataTable: dataTable, 
 
     options: { 
 
     filterColumnIndex: 0, 
 
     ui: { 
 
      format: {pattern: 'yyyy-MM-dd'} 
 
     } 
 
     } 
 
    }); 
 

 
    google.visualization.events.addListener(slider, 'ready', drawChart); 
 
    google.visualization.events.addListener(slider, 'statechange', drawChart); 
 

 
    slider.draw(); 
 

 
    function drawChart() { 
 
     var range = slider.getState(); 
 

 
     var dataView = new google.visualization.DataView(slider.getDataTable()); 
 
     dataView.setColumns([{ 
 
     calc: 'stringify', 
 
     sourceColumn: 0, 
 
     type: 'string' 
 
     }, 1, 2]); 
 
     dataView.setRows(dataTable.getFilteredRows([{ 
 
     column: 0, 
 
     minValue: range.lowValue, 
 
     maxValue: range.highValue 
 
     }])); 
 

 
     var chart = new google.visualization.ColumnChart(document.getElementById('chart_div')); 
 
     chart.draw(dataView, options); 
 
    } 
 
    }, 
 
    packages: ['controls', 'corechart'] 
 
});
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div id="filter_div"></div> 
 
<div id="chart_div"></div>

+0

是否可以将其移至聊天?这个方法的问题就像真棒一样,我使用json将数据发送到模板。数据是一个数组,并且我遍历该数组并将第一列转换为JS日期格式。我将数组直接放在行中。在上面的方法中,我是否必须用圆括号和其他格式来包围数组中的数据? –

+0

看到[这个答案](http:// stackoverflow。com/a/39756555/5090771),其中显示了如何构建JSON,特别是使用日期列,Google将接受 - 按上述答案格式化数据,允许您直接从JSON创建“DataTable”,而无需使用'JSON.parse'或'google.visualization.arrayToDataTable' - 在提供'DataTable'时,JSON可以是一个字符串或一个实际的JSON对象 - 参见['DataTable'控制器方法](https://开发人员.google.com/chart/interactive/docs/reference#constructor_1)了解更多... – WhiteHat