2016-09-28 160 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