列系列顶部预定位置的项目符号(不是列系列值)
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
截图:
让我们知道您的想法。
我有一个包含列系列的图表,它跨越 "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
截图:
让我们知道您的想法。