我试图使用dataprovider设置最大值轴,因为我在条形图中动态加载数据我需要看到"进展"其中一个酒吧与一个应该是总数的酒吧相比。
我如何实现这一目标?
我'尝试过:
"valueAxes": [
{
"id": "ValueAxis-1",
"stackType": "regular",
"maximum": myDataProviderAttribute
}
但没有运气。
任何建议都会被贬低。
答案 0 :(得分:1)
我已经提交了AmCharts支持的门票并获得了反馈:
您可以根据addInitHandler中的数据初始化图表前设置最大值。以下是简单柱形图的示例:
private void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
ItemContainerGenerator icg = sender as ItemContainerGenerator;
if (icg.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
foreach (var item in icg.Items)
{
var container = icg.ContainerFromItem(item) as ListViewItem;
Button button = FindVisualChild<Button>(container);
if (button != null)
{
button.Click -= Button_Click;
button.Click += Button_Click;
}
}
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("clicked");
}
private static T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
{
for (int childCount = 0; childCount < VisualTreeHelper.GetChildrenCount(parent); childCount++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, childCount);
if (child != null && child is T)
return (T)child;
else
{
T childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
您可能需要使用上述strictMinMax来强制执行该值: https://docs.amcharts.com/3/javascriptcharts/ValueAxis#strictMinMax
在addInitHandler中设置最小值的示例:
https://codepen.io/team/amcharts/pen/b4be8cb4e3c073909860720e0909a876?editors=1010
如果刷新数据或使用实时数据,则在设置动画或验证图表以显示更新数据之前,应重新计算最大值,如果希望更改轴,则使用chart.valueAxes [0] .maximum = max;其中max是根据数据输入计算的。
以下是一个例子:
AmCharts.addInitHandler(function(chart) {
// find data maximum:
var min = chart.dataProvider[0].visits;
for (var i in chart.dataProvider) {
if (chart.dataProvider[i].visits > max) {
max = chart.dataProvider[i].visits;
}
}
// set axes max based on value above:
chart.valueAxes[0].maximum = max + 100;
chart.valueAxes[0].strictMinMax = true;
});
在此示例中使用了上面的行:
https://codepen.io/team/amcharts/pen/d0d5d03cfdcc2cc256e28ec52ad8b95c/?editors=1010