AmCharts - 使用dataprovider设置最大值轴

时间:2017-06-22 14:26:02

标签: javascript amcharts

我试图使用dataprovider设置最大值轴,因为我在条形图中动态加载数据我需要看到"进展"其中一个酒吧与一个应该是总数的酒吧相比。

我如何实现这一目标?

我'尝试过:

"valueAxes": [
                {
                    "id": "ValueAxis-1",
                    "stackType": "regular",
                    "maximum": myDataProviderAttribute
                }

但没有运气。

任何建议都会被贬低。

1 个答案:

答案 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