我希望使用String作为Google Chart api的X轴的标签,用于Line Chart,我在两行数据中绘制两条线在单线图中绘制,我设法使其无需String标签(适用于数字)但没有显示haxis线
google.charts.load('current', {'packages': ['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data1 = new google.visualization.DataTable();
data1.addColumn('string', 'Month');
data1.addColumn('number', 'Average Sales Price');
data1.addColumn({type: 'string', role: 'tooltip', p: {'html': true}});
data1.addRows([
[{v: 0, f:'Q4 2013'}, 3,'<span class="total-home-tooltip">$300K Some html - 1!</span>'],
[{v: 1, f:'Q1 2014'}, 6,'<span class="total-home-tooltip">$600K Some html - 2!</span>'],
[{v: 2, f:'Q2 2014'}, 5,'<span class="total-home-tooltip">$500K Some html - 3!</span>'],
[{v: 3, f:'Q3 2014'}, 8,'<span class="total-home-tooltip">$800K Some html - 4!</span>'],
[{v: 4, f:'Q4 2014'}, 2,'<span class="total-home-tooltip">$200K Some html - 5!</span>'],
[{v: 5, f:'Q1 2015'}, 5,'<span class="total-home-tooltip">$500K Some html - 6!</span>'],
[{v: 6, f:'Q2 2015'}, 5,'<span class="total-home-tooltip">$500K Some html - 7!</span>']
]);
var data2 = new google.visualization.DataTable();
data2.addColumn('string', 'Month');
data2.addColumn('number', 'Median Sales Price');
data2.addColumn({type: 'string', role: 'tooltip', p: {'html': true}});
/*if we would like to show string in x asix we have to use data in format {v: 0, f:'Q4 2013'} otherwise google api will not draw haxis lines */
data2.addRows([
[{v: 0, f:'Q4 2013'}, 5,'<span class="total-home-tooltip">Some html here</span>'],
[{v: 1, f:'Q1 2014'}, 1,'<span class="total-home-tooltip">Some html here</span>'],
[{v: 2, f:'Q2 2014'}, 3,'<span class="total-home-tooltip">Some html here</span>'],
[{v: 3, f:'Q3 2014'}, 9,'<span class="total-home-tooltip">Some html here</span>'],
[{v: 4, f:'Q4 2014'}, 4,'<span class="total-home-tooltip">Some html here</span>'],
[{v: 5, f:'Q1 2015'}, 5,'<span class="total-home-tooltip">Some html here</span>'],
[{v: 6, f:'Q2 2015'}, 7,'<span class="total-home-tooltip">Some html here</span>']
]);
var options1 = {
legend: {
position: 'bottom',
textStyle: {color: 'black', fontSize: 14},
pointShape: "triangle",
alignment: 'end'
},
interpolateNulls: true,
height: 312,
width: 1070,
colors: ['#EBAD00','#00ACE0'],
pointSize: 8,
backgroundColor: {fill: "transparent"},
tooltip: {isHtml: true},
hAxis: {
minValue: 0,
baselineColor:"#BBBBBB"
},
vAxis: {
gridlines: {color: "transparent"},
minValue: 0,
baselineColor:"#BBBBBB"
},
ticks: [{v: 0, f:'Jan'},{v: 1, f:'Feb'},{v: 2, f:'Mar'},{v: 3, f:'Apr'},{v: 4, f:'May'},{v: 5, f:'June'},{v: 6, f:'July'}], // <------- This does the trick
annotations: {
style: 'line'
}
};
var joinedData = google.visualization.data.join(data1, data2, 'full', null, [1,2], [1,2]);
var chart = new google.visualization.LineChart(document.getElementById('market_trend_chart1'));
chart.draw(joinedData, options1 );
}
<div id="market_trend_chart1"></div>
我收到此错误错误:类型不匹配 . 值0与列索引0中的类型字符串不匹配,我理解错误是变量类型不匹配但不太确定如何解决此问题
工作小提琴没有字符串标签http://jsfiddle.net/j29Pt/536/(问题是现在没有haxis行)如果我尝试添加String作为标签http://jsfiddle.net/j29Pt/535/图表似乎停止工作
1 回答
首先,需要了解discrete vs continuous轴
'string'
列生成离散轴,'number'
列为连续轴和certian configuration options只能在一个或另一个上工作
例如,
hAxis.ticks
仅适用于连续轴(和vAxis.ticks
)所以如果你想要一个真正的
'string'
用于x轴,你将无法使用ticks
以下是一个工作示例,使用问题中的代码,使用
'string'
上述答案的问题,
data.join
方法对数据进行排序,导致季度出现故障(由于字符串排序)
作为一种解决方法,您可以添加一个额外的列进行排序,
然后使用DataView隐藏排序列
请参阅以下工作代码段...
此外,使用问题中的方法也很好
如果要使用数字列,则每个单元格都有一个值(
v:
)和一个格式化值(f:
)格式化的值(
f:
)将始终为'string'
但值(
v:
)必须与列的类型匹配使用
ticks
时适用同样的规则