我们在MVC项目中使用Google。
我们已经设法实现了图表,但我们有一个轻微的问题。
每当我们倾斜文本90度,hAxis标签重复(见下文)。

我们希望文本倾斜在90度,但只有标签出现在hAxis上一次(见下文)。

我们尝试过的事情(对图表没有影响):
设置hAxis网格线:
hAxis: {
slantedText: true,
slantedTextAngle: 90,
gridlines: {count: 7}
},设置hAxis小网格线:
hAxis: {
slantedText: true,
slantedTextAngle: 90,
minorGridlines: { count: 5 }
},有什么方法可以使hAxis标签达到预期的结果吗?
发布于 2017-07-20 11:35:17
使用连续轴时,
提供您自己的ticks以确保不重复..。
ticks接受与轴相同数据类型的值数组。
每个勾号都可以是一个原始值,例如日期-> new Date(2017, 3, 2)。
或者你可以用对象表示法
提供值(v:)和格式化值(f:)
{v: new Date(2017, 3, 2), f: '2017'}这些可以使用数据表方法-> getColumnRange动态构建。
,它返回具有列的min & max值的对象。
google.charts.load('current', {
callback: function () {
var data = google.visualization.arrayToDataTable([
[{type: 'date'}, {type: 'number'}, {type: 'number'}],
[new Date(2008, 2, 5), 10, 2],
[new Date(2008, 6, 6), 25, 4],
[new Date(2008, 10, 8), 30, 6],
[new Date(2009, 3, 2), 50, 7],
[new Date(2009, 8, 12), 60, 8],
[new Date(2009, 11, 20), 62, 9],
[new Date(2010, 2, 5), 64, 10],
[new Date(2010, 6, 6), 70, 10],
[new Date(2010, 10, 8), 71, 10],
[new Date(2011, 3, 2), 100, 12],
[new Date(2012, 8, 12), 125, 12],
[new Date(2012, 11, 20), 160, 12],
[new Date(2013, 10, 8), 71, 10],
[new Date(2014, 3, 2), 100, 12],
[new Date(2015, 8, 12), 125, 12],
[new Date(2016, 9, 20), 160, 12],
[new Date(2016, 10, 8), 71, 10],
[new Date(2017, 3, 2), 100, 12],
[new Date(2017, 5, 12), 125, 12],
[new Date(2017, 6, 20), 160, 12]
]);
var dateRange = data.getColumnRange(0);
var oneYear = (1000 * 60 * 60 * 24 * 365.25);
var ticksAxisH = [];
for (var i = dateRange.min.getTime(); i <= dateRange.max.getTime(); i = i + oneYear) {
var tick = new Date(i);
ticksAxisH.push({
v: tick,
f: tick.getFullYear().toString()
});
}
var options = {
hAxis: {
ticks: ticksAxisH
},
legend: 'none'
};
var chart = new google.visualization.LineChart($('#chart').get(0));
chart.draw(data, options);
},
packages:['corechart']
});<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="chart"></div>
编辑
ticks选项只支持连续轴(日期、数字等)
对于离散轴(字符串)不可用。
使用数据视图将第一列转换为数字.
// convert first column to number
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
return parseInt(dt.getValue(row, 0));
},
label: data.getColumnLabel(0),
type: 'number'
}, 1, 2]);然后使用数据表/视图方法-> getDistinctValues(colIndex)
这将返回列中不同值的数组,
可用于ticks的
看下面的工作片段..。
google.charts.load('current', {
callback: function () {
var data = new google.visualization.DataTable({
"cols": [
{"type": "string" ,"id": "Data" ,"label": "Label" },
{"type": "number" ,"id": "Performance" ,"label": "Performance" },
{"type": "number" ,"id": "Index" ,"label": "Index" }
],
"rows": [
{"c" : [{"v": "2008"}, {"v": 0}, {"v": "0"}]},
{"c" : [{"v": "2008"}, {"v": 0.07103609}, {"v": "0.0052939"}]},
{"c" : [{"v": "2008"}, {"v": 0.12668605420031}, {"v": "0.0152939"}]},
{"c" : [{"v": "2009"}, {"v": 0.27103609}, {"v": "0.0252939"}]},
{"c" : [{"v": "2009"}, {"v": 0.32668605420031}, {"v": "0.0352939"}]},
{"c" : [{"v": "2010"}, {"v": 0.37103609}, {"v": "0.0452939"}]},
{"c" : [{"v": "2010"}, {"v": 0.42668605420031}, {"v": "0.0552939"}]},
{"c" : [{"v": "2011"}, {"v": 0.47103609}, {"v": "0.0652939"}]},
{"c" : [{"v": "2011"}, {"v": 0.52668605420031}, {"v": "0.0752939"}]},
{"c" : [{"v": "2012"}, {"v": 0.57103609}, {"v": "0.0852939"}]},
{"c" : [{"v": "2012"}, {"v": 0.62668605420031}, {"v": "0.0952939"}]},
{"c" : [{"v": "2013"}, {"v": 0.67103609}, {"v": "0.1052939"}]},
{"c" : [{"v": "2013"}, {"v": 0.72668605420031}, {"v": "0.2152939"}]}
]
});
// convert first column to number
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
return parseInt(dt.getValue(row, 0));
},
label: data.getColumnLabel(0),
type: 'number'
}, 1, 2]);
var options = {
hAxis: {
format: '0',
ticks: view.getDistinctValues(0)
},
legend: 'none'
};
var chart = new google.visualization.LineChart($('#chart').get(0));
chart.draw(view, options); // <-- use view to draw chart
},
packages:['corechart']
});<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="chart"></div>
编辑2
另一种选择是将轴保持为离散(字符串),
并从数据中删除重复标签。
这也可以使用数据视图来完成.
// remove duplicates from first column
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
var xValue = dt.getValue(row, 0);
if ((row > 0) && (xValue === dt.getValue(row - 1, 0))) {
return null;
} else {
return xValue;
}
},
label: data.getColumnLabel(0),
type: 'string'
}, 1, 2]);看下面的工作片段..。
google.charts.load('current', {
callback: function () {
var data = new google.visualization.DataTable({
"cols": [
{"type": "string" ,"id": "Data" ,"label": "Label" },
{"type": "number" ,"id": "Performance" ,"label": "Performance" },
{"type": "number" ,"id": "Index" ,"label": "Index" }
],
"rows": [
{"c" : [{"v": "2008"}, {"v": 0}, {"v": "0"}]},
{"c" : [{"v": "2008"}, {"v": 0.07103609}, {"v": "0.0052939"}]},
{"c" : [{"v": "2008"}, {"v": 0.12668605420031}, {"v": "0.0152939"}]},
{"c" : [{"v": "2009"}, {"v": 0.27103609}, {"v": "0.0252939"}]},
{"c" : [{"v": "2009"}, {"v": 0.32668605420031}, {"v": "0.0352939"}]},
{"c" : [{"v": "2010"}, {"v": 0.37103609}, {"v": "0.0452939"}]},
{"c" : [{"v": "2010"}, {"v": 0.42668605420031}, {"v": "0.0552939"}]},
{"c" : [{"v": "2011"}, {"v": 0.47103609}, {"v": "0.0652939"}]},
{"c" : [{"v": "2011"}, {"v": 0.52668605420031}, {"v": "0.0752939"}]},
{"c" : [{"v": "2012"}, {"v": 0.57103609}, {"v": "0.0852939"}]},
{"c" : [{"v": "2012"}, {"v": 0.62668605420031}, {"v": "0.0952939"}]},
{"c" : [{"v": "2013"}, {"v": 0.67103609}, {"v": "0.1052939"}]},
{"c" : [{"v": "2013"}, {"v": 0.72668605420031}, {"v": "0.2152939"}]}
]
});
// remove duplicates from first column
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
var xValue = dt.getValue(row, 0);
if ((row > 0) && (xValue === dt.getValue(row - 1, 0))) {
return null;
} else {
return xValue;
}
},
label: data.getColumnLabel(0),
type: 'string'
}, 1, 2]);
var options = {
chartArea: {
height: '100%',
width: '100%',
top: 12,
left: 24,
bottom: 48,
right: 4
},
hAxis: {
maxAlternation: 1
},
height: '100%',
legend: 'none',
width: '100%'
};
var chart = new google.visualization.LineChart($('#chart').get(0));
chart.draw(view, options);
$(window).resize(function() {
chart.draw(view, options);
});
},
packages:['corechart']
});<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="chart"></div>
发布于 2017-07-20 15:56:06
胜利!
所以我终于让它起作用了。WhiteHat,你真是个天才!谢谢!Edit2做到了这一点,但是我在hAxis中添加了一个额外的属性来显示所有标签(参见下面)。
showTextEvery:1下面是其他有此问题的人的全部实现。
var data = new google.visualization.DataTable(@Html.Raw(Json.Encode(perfData)));
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
var xValue = dt.getValue(row, 0);
if ((row > 0) && (xValue === dt.getValue(row-1, 0))) {
return null;
} else {
return xValue;
}
},
label: data.getColumnLabel(0),
type: 'string'
}, 1, 2]);
var options = {
chartArea : { left: 40, top:10},
width:450,
height: 300,
hAxis: {
slantedText: true,
slantedTextAngle: 90,
showTextEvery:1
},
legend:{position:'bottom'},
vAxis: {
format: '#%',
gridlines: {count: 7}
}
};
var chart_div = document.getElementById('returnsChart');
var chart = new google.visualization.LineChart(chart_div);
chart.draw(view, options);
$(window).resize(function () {
chart.draw(view, options);
});以下是最后的图片:

https://stackoverflow.com/questions/45211213
复制相似问题