highcharts - 在 Highstock 中对齐多个轴的标题
问题描述
我在 Highstock 图表中有 4 个轴:
var p0 = [
[1538341200000,110.91],
[1538427600000,126.01],
[1538514000000,129.54],
[1538600400000,125.54]];
var p1 = [
[1538341200000,113.14],
[1538427600000,129.48],
[1538514000000,132.28],
[1538600400000,129.53],];
var t0 = [
[1538341200000,29.25],
[1538427600000,37.28],
[1538514000000,36.1],
[1538600400000,36.17],];
var t1 = [
[1538341200000,29.67],
[1538427600000,37.53],
[1538514000000,37.26],
[1538600400000,37.9],];
Highcharts.stockChart('container', {
chart: {
renderTo: "container"
},
title: {
text: "Sample test",
align: "center",
y: 14
},
legend: {
enabled: true,
align: "center",
verticalAlign: "top",
y: 40
},
xAxis: {
ordinal: false
},
yAxis: [
{
left: "-100%",
height: "18%",
top: "7%"
},
{
left: "-100%",
height: "18%",
top: "32%"
},
{
left: "-100%",
height: "18%",
top: "57%"
},
{
left: "-100%",
height: "18%",
top: "82%"
}
],
series: [
{
name: "Pressure 3",
data: p0,
yAxis: 0
},
{
name: "Pressure 4",
data: p1,
yAxis: 1
},
{
name: "Temperature 3",
data: t0,
yAxis: 2
},
{
name: "Temperature 4",
data: t1,
yAxis: 3
}
]
});
<script src="http://code.highcharts.com/stock/highstock.js"></script>
<div id="container" style="width: 600px; height: 600px;"></div>
现在,我想为左上角的每个轴添加标题,如下所示:
var p0 = [
[1538341200000,110.91],
[1538427600000,126.01],
[1538514000000,129.54],
[1538600400000,125.54]];
var p1 = [
[1538341200000,113.14],
[1538427600000,129.48],
[1538514000000,132.28],
[1538600400000,129.53],];
var t0 = [
[1538341200000,29.25],
[1538427600000,37.28],
[1538514000000,36.1],
[1538600400000,36.17],];
var t1 = [
[1538341200000,29.67],
[1538427600000,37.53],
[1538514000000,37.26],
[1538600400000,37.9],];
Highcharts.stockChart('container', {
chart: {
renderTo: "container"
},
title: {
text: "Sample test",
align: "center",
y: 14
},
legend: {
enabled: true,
align: "center",
verticalAlign: "top",
y: 40
},
xAxis: {
ordinal: false
},
yAxis: [
{
title: {
text: "Pressure 3",
rotation: 0,
y: -10
},
left: "-101%",
height: "18%",
top: "7%"
},
{
title: {
text: "Pressure 4",
rotation: 0,
y: -10
},
left: "-101%",
height: "18%",
top: "32%"
},
{
title: {
text: "Temperature 3",
rotation: 0,
y: -10
},
left: "-101%",
height: "18%",
top: "57%"
},
{
title: {
text: "Temperature 4",
rotation: 0,
y: -10
},
left: "-101%",
height: "18%",
top: "82%"
}
],
series: [
{
name: "Pressure 3",
data: p0,
yAxis: 0
},
{
name: "Pressure 4",
data: p1,
yAxis: 1
},
{
name: "Temperature 3",
data: t0,
yAxis: 2
},
{
name: "Temperature 4",
data: t1,
yAxis: 3
}
]
});
<script src="http://code.highcharts.com/stock/highstock.js"></script>
<div id="container" style="min-width: 400px; height: 600px;"></div>
正如您所看到的,每个标题都会中断下一个标题,并添加一些边距并将它们“推”到右侧。
这是预期的结果:
我尝试了许多 highstock 属性和 css 样式以使它们浮动以避免它们推动自己,但没有任何效果。
如何避免这个问题?
解决方案
您要实现的不是轴标题的默认行为。按照您的期望绘制标题的最简单方法是使用Highcharts SVG 渲染器制作自定义标题。
每个 yAxis 都有属性top
,left
我们可以使用这些属性在适当的位置绘制自定义标题。请注意,导航器只是一个附加系列,因此 yAxis 数组将比您定义的多一个元素。渲染器创建的标题是Highcharts.SVGElement。每次渲染图表时,您都必须销毁旧图表并再次渲染它们(在新位置):
var titlesColl = [],
titles = [
"Pressure 3",
"Pressure 4",
"Temperature 3",
"Temperature 4"
];
chart: {
events: {
render: function() {
var chart = this,
yaxisColl = chart.yAxis,
offsetY = -4,
axis,
title,
i;
if (titlesColl.length) {
titlesColl.forEach(function(elem) {
elem.destroy();
});
titlesColl.length = 0;
}
for (i = 0; i < yaxisColl.length - 1; i++) {
axis = yaxisColl[i];
title = chart.renderer
.text(titles[i], axis.left, axis.top + offsetY)
.css({
'font-size': '10px'
})
.add();
titlesColl.push(title);
}
}
}
}
推荐阅读
- c++ - C++ glfw 错误:找不到“GLFW/glfw3.h”文件
- java - Android 崩溃:java.lang.RuntimeException:在 android.app.ActivityThread.performResumeActivity
- parse-platform - 用于解析服务器 docker 容器的 Apollo GraphQL 客户端
- python - Scrapy:无项目输出 | 调试:爬网(200)...(引用者:无)
- spring-boot - 迁移中 hibernate.hbm2ddl.auto 的问题
- node.js - 如何从以前的对话流中获取参数?
- visual-studio-code - VS Code 中的 Markdown 预览不会禁用字体连字
- python - 执行高真阳性的深度学习损失
- python - Python:该进程无法访问该文件,因为它正在被另一个进程使用:
- python - 在 imageai 中,您如何解释保存的模型的名称,例如“model_ex-077_acc-0.941176.h5”?