【发布时间】:2019-04-04 21:25:44
【问题描述】:
我正在使用 Google 图表创建水平条形图,并且我想在刻度之间放置水平轴刻度标签(将刻度标签向右偏移半个刻度)。也不能保证每个标签的字符数相同。有什么功能可以实现这一点吗?
这是我创建图表的函数
function drawChart() {
var data = google.visualization.arrayToDataTable([
["Performance", "Level", { role: "style" }],
["PL", 1.01, "#5aa66d"]
]);
var view = new google.visualization.DataView(data);
view.setColumns([0, 1,
{
calc: function (dt, rowIndex) { return 'PL=' + (dt.getValue(rowIndex, 1)).toString()} ,
sourceColumn: 1,
type: "string",
role: "annotation"
},
2]);
var options = {
width: 600,
height: 100,
bar: { groupWidth: "80%" },
legend: { position: "none" },
hAxis: {
minValue: 0,
maxValue: 3,
ticks: [
{ v: 0, f: 'Col1' },
{ v: 1, f: 'Col2' },
{ v: 2, f: 'Col3' },
{ v: 3, f: 'Col4' }
]
}
};
var chart = new google.visualization.BarChart(document.getElementById("barchart_values"));
chart.draw(view, options);
}
这是当前的图表 https://imgur.com/LvQEbtY 这就是我想要实现的目标: https://imgur.com/hwvIOG2
编辑: 对于想法,在 chart.draw 之前我添加了一个事件侦听器并找到所有文本标签并修改“x”属性以重新定位刻度标签。这可行,但它也会影响条形数据标签,这是一个问题。
google.visualization.events.addListener(chart, 'ready', function () {
var elements = document.getElementById("barchart_values").getElementsByTagName("text");
for (var i = 0; i < elements.length; i++) {
elements[i].setAttribute('x', (Number(elements[i].getAttribute('x')) + (chart.getChartLayoutInterface().getBoundingBox('chartarea').width / 4 / 2))); //chart width / tick count / 2
}
});
【问题讨论】:
-
@WhiteHat 我认为您提供的答案在我的情况下不起作用,因为当它应该向上移动半个刻度时,“0”刻度标签仍在水平轴上。
标签: charts google-visualization