列系列顶部预定位置的项目符号(不是列系列值)

Bullets at pre-determined locations on top of column series (not column series values)

我有一个包含列系列的图表,它跨越 "time range"(毫秒)。对于每个时间范围(条),我可以轻松地映射相关 "things" 的时间值列表,这些时间值不属于时间序列数据集(由 AmCharts 呈现 - 尽管它们可能是,但我没有知道我在做什么)。

如何获取值的关系列表(每个柱),并将它们绘制为我的 ColumnSeries 中每个柱顶部的项目符号?

我的X轴是ValueAxis类型,我的series是ColumnSeries类型(横图)。我想在预定位置的每个 bar/series 之上叠加 "dots"(圆圈)。

让我们使用如下数据源

data = [
    {
        "min": 0,
        "max": 100,
        "dots": [10, 40, 80]
    },
    {
        "min": 30,
        "max": 150,
        "dots": [25, 500,110]
    }

]

这可以通过 min/maxes 轻松构建一个非常简单的 gaant 图表。我坚持的步骤是采用 dots 字段并将其用作应该绘制 bullets (am4) 的位置列表。

如果您能提供一些示例供我们使用,这样您就可以更好地了解您要实现的目标,这将有所帮助。

amCharts v4 提供了很多功能和灵活性,你可以做的是遍历数据数组,看看 dots 数组的最大长度是多少(如果它太动态而无法提前知道) , 并制造该数量的子弹。当这些项目符号加载 (bullet.events.on("inited", function(event) { var bullet = event.target; /* magic here */ })) 时,检查它们在 dots 数组中的数据,它们代表哪个索引,并通过轴方法将它们沿轴放置(如 anyToPoint() 以确定坐标在哪里可能是为了那个。

绝对可行。

或者您可以做一些疯狂的事情,例如将 dots 数组展平到您的数据数组中,用于图表或特定于 "bullet" 系列。然后,不要像上面提到的那样为每个点设置多个项目符号,只需使用 LineSeries 代替并隐藏它的行。例如。其中 "income" 是 ColumnSeries 的数据字段,"expenses" 是 LineSeries 的字段:

chart.data = [{
        "year": "2005",
        "income": 23.5,
        "expenses": 18.1
    },
    {
        "year": "2005",
        "expenses": 23.1
    },
    {
        "year": "2005",
        "expenses": 28.1
    }, 
    {
        "year": "2006",
        "income": 26.2,
        "expenses": 22.8
    },
    // ...
];

var lineSeries = chart.series.push(new am4charts.LineSeries());
lineSeries.dataFields.categoryY = "year";
lineSeries.dataFields.valueX = "expenses";
lineSeries.strokeWidth = 0;

查看我们 Bar and line chart mix demo 的这个分支:

https://codepen.io/team/amcharts/pen/3580a3329f04b8a4387a08c4be7e2f67

截图:

让我们知道您的想法。