【问题标题】:Xamarin.Forms MicroCharts BarChart with Multiple ValuesXamarin.Forms 具有多个值的 MicroCharts 条形图
【发布时间】:2020-02-04 17:00:59
【问题描述】:

我正在使用 MicroCharts 条形图

  <forms:ChartView x:Name="chart1" HeightRequest="150">

我从 Api 读取数据列表。我需要显示按参数 year 分组的数据(我从列表中的每个对象中读取)并且每年显示 3 个值。类似于这个例子:

private PlotView _opv = new PlotView();
            MessagingCenter.Subscribe<Object, BindingList<Summary>>(this, "Sum", (args, list) =>
            {
                var plotModel = new PlotModel { Title = "OxyPlot Demo" };
                CategoryAxis xaxis = new CategoryAxis();
                xaxis.Position = OxyPlot.Axes.AxisPosition.Bottom;
                xaxis.MajorGridlineStyle = LineStyle.Solid;
                xaxis.MinorGridlineStyle = LineStyle.Dot;
                foreach (var el in list)
                {
                    xaxis.Labels.Add(el.Year);
                    ColumnSeries s = new ColumnSeries();
                    s.IsStacked = false;
                    s.Items.Add(new ColumnItem((double)el.Plus));
                    s.Items.Add(new ColumnItem((double)el.Minus));
                    s.Items.Add(new ColumnItem((double)el.Sum));

                    plotModel.Series.Add(s);
                    s.ClearSelection();

                }
                plotModel.Axes.Add(xaxis);
                plotModel.Axes.Add(new LinearAxis { Position = OxyPlot.Axes.AxisPosition.Left, Minimum = 0, Maximum = 10000000 });

                _opv.Model = plotModel;
            });
            Content = _opv;

这是我的代码,但没有显示真实数据 有什么建议吗?

【问题讨论】:

    标签: xamarin xamarin.forms xamarin.android xamarin.ios


    【解决方案1】:

    如果你想达到上面的效果,可以考虑使用OxyPlot.Xamarin.Forms

    在你的MainActivityXamarin.Forms.Forms.Init之后初始化:

    global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
    OxyPlot.Xamarin.Forms.Platform.Android.PlotViewRenderer.Init();
    

    在你的page.xam.cs中:

    public class BarChar : ContentPage
    {
        private PlotView _opv = new PlotView();
        public BarChar()
        {
            var plotModel = new PlotModel { Title = "OxyPlot Demo" };
            CategoryAxis xaxis = new CategoryAxis();
            xaxis.Position = AxisPosition.Bottom;
            xaxis.MajorGridlineStyle = LineStyle.Solid;
            xaxis.MinorGridlineStyle = LineStyle.Dot;
            xaxis.Labels.Add("2/2010");
            xaxis.Labels.Add("2/2011");
            xaxis.Labels.Add("2/2012");
            xaxis.Labels.Add("2/2013");
    
            ColumnSeries s1 = new ColumnSeries();
            s1.IsStacked = false;
            s1.Items.Add(new ColumnItem(1.2));
            s1.Items.Add(new ColumnItem(1.6));
            s1.Items.Add(new ColumnItem(1.4));
            s1.Items.Add(new ColumnItem(1.5));
    
            ColumnSeries s2 = new ColumnSeries();
            s2.IsStacked = false;
            s2.Items.Add(new ColumnItem(1.5));
            s2.Items.Add(new ColumnItem(1.6));
            s2.Items.Add(new ColumnItem(1.1));
            s2.Items.Add(new ColumnItem(1.2));
    
            ColumnSeries s3 = new ColumnSeries();
            s3.IsStacked = false;
            s3.Items.Add(new ColumnItem(1.2));
            s3.Items.Add(new ColumnItem(1.3));
            s3.Items.Add(new ColumnItem(1.4));
            s3.Items.Add(new ColumnItem(1.5));
    
            ColumnSeries s4 = new ColumnSeries();
            s4.IsStacked = false;
            s4.Items.Add(new ColumnItem(1.5));
            s4.Items.Add(new ColumnItem(1.4));
            s4.Items.Add(new ColumnItem(1.3));
            s4.Items.Add(new ColumnItem(1.2));
    
    
    
            plotModel.Series.Add(s1);
            plotModel.Series.Add(s2);
            plotModel.Series.Add(s3);
            plotModel.Series.Add(s4);
    
            plotModel.Axes.Add(xaxis);
            plotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0, Maximum = 1.6 });
    
            _opv.Model = plotModel;
            Content = _opv;
        }
    }
    

    【讨论】:

    • @VaskoJosifovski 它也适用于 ios,你需要在 ios 项目中调用OxyPlot.Xamarin.Forms.Platform.iOS.PlotViewRenderer.Init();,你可以阅读document
    • 你能打开聊天问什么吗
    • @VaskoJosifovskic 你有没有在消息中心得到正确的数据
    • @VaskoJosifovski 尝试将内容添加到 Device.BeginInvokeOnMainThread 里面 MessagingCenter.Subscribe
    • 你的意思是这样的:Device.BeginInvokeOnMainThread(() => { Content = _opv; });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多