javascript - 显示 am4charts.XYChart 中的所有工具提示
问题描述
大家好,我使用 am4charts.XYChart 来显示两个不同供应商的价格
图表工作正常,每个点的工具提示只有当我们将光标悬停在图表中的点上时才可见,但我的要求是在渲染图表时应该显示图表中所有点的工具提示。
它应该一直显示而不悬停。
我已使用以下代码生成图表。
<script src="https://www.amcharts.com/lib/4/core.js"></script>
<script src="https://www.amcharts.com/lib/4/charts.js"></script>
<script src="https://www.amcharts.com/lib/4/themes/dark.js"></script>
<script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>
dynamic_data_arr = [{date: "2019-02-25", market1: "21.67", sales1: "Amazon", market2: "25.92", sales2: "La Collette"},
{date: "2019-02-26", market1: "21.67", sales1: "Amazon", market2: "25.92", sales2: "La Collette,Co-op"}]
am4core.useTheme(am4themes_dark);
am4core.useTheme(am4themes_animated);
// Themes end
// Create chart instance
chart = am4core.create("amcharts_chartdiv", am4charts.XYChart);
// Add data
// chart.data = [] ;
chart.data = dynamic_data_arr;
// chart.validateData();
// Create axes
var dateAxis = chart.xAxes.push(new am4charts.DateAxis());
//dateAxis.renderer.grid.template.location = 0;
//dateAxis.renderer.minGridDistance = 30;
var valueAxis1 = chart.yAxes.push(new am4charts.ValueAxis());
// valueAxis1.title.text = "Sales";
console.log(valueAxis1);
var valueAxis2 = chart.yAxes.push(new am4charts.ValueAxis());
console.log(valueAxis2);
// valueAxis2.title.text = "Market Days";
valueAxis2.renderer.opposite = true;
valueAxis2.renderer.grid.template.disabled = true;
var series3 = chart.series.push(new am4charts.LineSeries());
series3.dataFields.valueY = "market1";
series3.dataFields.dateX = "date";
series3.dataFields.nameX = "sales1";
series3.name = "Amazon";
series3.strokeWidth = 2;
series3.tensionX = 0.7;
series3.yAxis = valueAxis2;
series3.tooltipText = "{nameX}\n[bold font-size: 20]{valueY}[/]";
series3.showBalloon = true;
var bullet3 = series3.bullets.push(new am4charts.CircleBullet());
bullet3.circle.radius = 3;
bullet3.circle.strokeWidth = 2;
bullet3.circle.fill = am4core.color("#fff");
var series4 = chart.series.push(new am4charts.LineSeries());
series4.dataFields.valueY = "market2";
series4.dataFields.dateX = "date";
series4.dataFields.nameX = "sales2";
series4.name = "Local Vendors";
series4.strokeWidth = 2;
series4.tensionX = 0.7;
series4.yAxis = valueAxis2;
series4.tooltipText = "{nameX}\n[bold font-size: 20]{valueY}[/]";
series4.stroke = chart.colors.getIndex(0).lighten(0.5);
series4.strokeDasharray = "3,3";
series4.showBalloon = true;
var bullet4 = series4.bullets.push(new am4charts.CircleBullet());
bullet4.circle.radius = 3;
bullet4.circle.strokeWidth = 2;
bullet4.circle.fill = am4core.color("#fff");
// Add cursor
chart.cursor = new am4charts.XYCursor();
// Add legend
chart.legend = new am4charts.Legend();
chart.legend.position = "top";
// Add scrollbar
chart.scrollbarX = new am4charts.XYChartScrollbar();
// chart.scrollbarX.series.push(series1);
chart.scrollbarX.series.push(series3);
chart.scrollbarX.parent = chart.bottomAxesContainer; `
如果有任何选项可以同时显示所有工具提示,请告诉我。蒂亚。
解决方案
LabelTooltip
s 似乎更符合您想要做的事情。
然而,事实仍然是它们不是工具提示。如果您仍然想要实际Tooltip
的 s,例如因为LabelBullet
s 没有指向其关联项目符号的 ... 提示,因为工具提示有点像单例,即每个系列 1 个并且项目符号使用它,您将不得不滚动你自己。
如果您启用了动画主题并具有初始动画,为避免出现问题,请等到系列动画结束后再执行您需要的操作:
// A series already gets a transitionended event, so we'll wait for chart to be ready to listen to the right one
chart.events.once("ready", function(event) {
chart.series.each(function(series) {
// Wait for the init animation to be over before doing what we need to
series.events.once("transitionended", function(seriesEvent) {
// your code here
});
});
});
那时我们可以创建工具提示,将它们的数据链接到系列',并根据每个项目符号放置它们。子弹可以在系列中找到bulletsContainer
。请务必根据需要自定义工具提示,例如:
series.bulletsContainer.children.each(function(bullet, index) {
var tooltip = new am4core.Tooltip();
tooltip.dataItem = tooltip.tooltipDataItem = series.dataItems.getIndex(index);
// place the tooltip in an appropriate container so the x/y coords are exact
tooltip.parent = chart.plotContainer;
tooltip.x = bullet.x;
tooltip.y = bullet.y;
tooltip.label.text = "{nameX}\n[bold font-size: 20]{valueY}[/]";
tooltip.getFillFromObject = false;
tooltip.background.fill = series.fill;
tooltip.show();
});
叉子:
https://jsfiddle.net/notacouch/9Ljk7t6z/
演示中还有其他代码可与图例切换兼容以帮助您入门。
推荐阅读
- c# - 游戏角色拆分血条计算
- google-chrome - 如何从 Word 加载项中的沙盒属性启用“允许下载无用户激活”
- ios - App Store Connect ITMS-90809 错误:使用 CocoaPods 使用 Cordova 开发的本机 iOS 应用程序
- unit-testing - 如何使用 application.properties 中定义的特定配置文件运行 quarkus 测试
- highcharts - Highcharts 在自定义图例上调用图例鼠标悬停
- matplotlib - ffmpeg 水平翻转使视频更短
- wpf - 可观察到 System.Windows.Point
- javascript - 如何在 Deno 中写入文件?
- python - 如果对象属性在一个范围之间,类对象只能调用一个方法
- c - 为什么模块加载失败?(/dev/scull0 : 没有这样的设备或地址)