【发布时间】:2019-01-18 17:43:20
【问题描述】:
我有一个图表设置,其中包含三个系列,每个系列都有自己的 y 轴。目前它们显示在图表的两侧,如下所示:
这比我想要的图表要忙一些,因为有时系列可以混合在一起。我怎样才能使y轴不重叠,如下所示:
编辑:这是working example
/**
* ---------------------------------------
* This demo was created using amCharts 4.
*
* For more information visit:
* https://www.amcharts.com/
*
* Documentation is available at:
* https://www.amcharts.com/docs/v4/
* ---------------------------------------
*/
// Apply chart themes
am4core.useTheme(am4themes_animated);
// Create chart instance
var chart = am4core.create("chartdiv", am4charts.XYChart);
chart.paddingRight = 20;
var dateAxis = chart.xAxes.push(new am4charts.DateAxis());
dateAxis.baseInterval = {
'timeUnit': 'second',
'count': 1
};
dateAxis.dateFormats.setKey('minute', 'h:mm a');
dateAxis.tooltipDateFormat = '[bold]MM-dd-yy, h:mm:ss a[/]';
dateAxis.renderer.grid.template.location = 0;
chart.yAxes.push(new am4charts.ValueAxis());
chart.yAxes.push(new am4charts.ValueAxis());
chart.yAxes.push(new am4charts.ValueAxis());
chart.cursor = new am4charts.XYCursor();
chart.legend = new am4charts.Legend();
var data = [
{name:'value1', value: 2, timestamp: '2018-01-01T15:00:00.00Z'},
{name:'value2', value: 5, timestamp: '2018-01-01T15:00:00.00Z'},
{name:'value3', value: 8, timestamp: '2018-01-01T15:00:00.00Z'},
{name:'value1', value: 4, timestamp: '2018-01-01T15:00:15.00Z'},
{name:'value2', value: 2, timestamp: '2018-01-01T15:00:15.00Z'},
{name:'value3', value: 5, timestamp: '2018-01-01T15:00:15.00Z'},
{name:'value1', value: 9, timestamp: '2018-01-01T15:00:30.00Z'},
{name:'value2', value: 11, timestamp: '2018-01-01T15:00:30.00Z'},
{name:'value3', value: 6, timestamp: '2018-01-01T15:00:30.00Z'},
{name:'value1', value: 4, timestamp: '2018-01-01T15:00:45.00Z'},
{name:'value2', value: 5, timestamp: '2018-01-01T15:00:45.00Z'},
{name:'value3', value: 13, timestamp: '2018-01-01T15:00:45.00Z'},
{name:'value1', value: 1, timestamp: '2018-01-01T15:01:00.00Z'},
{name:'value2', value: 7, timestamp: '2018-01-01T15:01:00.00Z'},
{name:'value3', value: 11, timestamp: '2018-01-01T15:01:00.00Z'},
];
var names = ['value1','value2', 'value3'];
names.forEach((name, index) => {
var opposite = index % 2 == 0;
var series = this.chart.series.push(new am4charts.LineSeries());
var yAxis = this.chart.yAxes.getIndex(index);
series.yAxis = yAxis;
series.name = name;
series.dataFields.dateX = 'date';
series.dataFields.valueY = 'value';
series.data = data.filter(d => d.name === name).map( d => {
return {date: new Date(d.timestamp), value: d.value};
});
switch (name) {
case 'value1':
series.stroke = am4core.color('#9E842F');
yAxis.minY = 0;
yAxis.maxY = 31;
break;
case 'value2':
series.stroke = am4core.color('#196D6F');
yAxis.minY = -20;
yAxis.maxY = 80;
break;
case 'value3':
series.stroke = am4core.color('#553786');
yAxis.minY = 0;
yAxis.maxY = 100;
break;
}
series.tooltip.getFillFromObject = false;
series.tooltip.background.fill = series.stroke;
series.tooltipText = '{name}: [bold]{valueY}[/]';
yAxis.cursorTooltipEnabled = false;
yAxis.renderer.line.strokeOpacity = 1;
yAxis.renderer.line.strokeWidth = 2;
yAxis.renderer.line.stroke = series.stroke;
yAxis.renderer.labels.template.fill = series.stroke;
yAxis.renderer.opposite = opposite;
yAxis.renderer.grid.template.disabled = true;
var bullet = series.bullets.push(new am4charts.CircleBullet());
bullet.width = 5;
bullet.height = 5;
bullet.fill = series.stroke;
});
var scrollbarX = new am4charts.XYChartScrollbar();
chart.series.values.forEach(s => {
scrollbarX.series.push(s);
});
chart.scrollbarX = scrollbarX;
chart.scrollbarX.parent = this.chart.bottomAxesContainer;
chart.validateData();
【问题讨论】:
-
你能添加一个链接到一个工作示例吗?
-
您不想创建 3 个单独的图表吗?看起来这可能是一个非常简单的解决方案。
-
我不想创建 3 个单独的图表有 2 个原因: 1. 我只想显示 1 个 X 轴 2. 我在此图表上使用可能难以实现的光标三张图。如果您将鼠标悬停在特定时间的 x 值上,您可以在工具提示中看到所有系列 y 值。
标签: javascript typescript amcharts