【问题标题】:Why does my LiveCharts piechart create 3 charts instead of 3 slices为什么我的 LiveCharts 饼图创建 3 个图表而不是 3 个切片
【发布时间】:2019-03-07 10:08:12
【问题描述】:

我有一个要在饼图中显示的数据表。 Amount 是值,MsgType 是标签。图表应该有 3 个切片。表格如下所示:

MsgType    Amount
-----------------
3          4500
2          1262
1          3956

我已经按照一些示例创建了一个新的饼图系列并在我的应用程序中显示它。代码隐藏如下:

    public SeriesCollection MsgTypeDoughnut { get; set; }
    public List<int> Lables { get; set; }


    public MsgTypeProportion()
    {
        InitializeComponent();

        List<DataMsgType> dataMsgTypes = GetMsgType();
        ChartValues<int> values = new ChartValues<int>();
        Lables = new List<int>();
        foreach (var item in dataMsgTypes)
        {
            values.Add(item.Amount);
            Lables.Add(item.MsgType);
        }

        MsgTypeDoughnut = new SeriesCollection
        {
            new PieSeries
            {
                Title = "Amount",
                Values = values,
                DataLabels = true
            }
        };

        DataContext = this;
    }

    public List<DataMsgType> GetMsgType()
    {
        DataSet DS = new DataSet();
        DataSetTableAdapters.spMessages_GetMsgTypeOverviewTableAdapter MsgTypeta = new DataSetTableAdapters.spMessages_GetMsgTypeOverviewTableAdapter();
        MsgTypeta.Fill(DS.spMessages_GetMsgTypeOverview);
        List<DataMsgType> dataMsgTypes = new List<DataMsgType>();
        foreach (DataRow row in DS.Tables["spMessages_GetMsgTypeOverview"].Rows)
        {
            dataMsgTypes.Add(new DataMsgType() { MsgType = (int)row["MsgType"], Amount = (int)row["Amount"]});
        }

        return dataMsgTypes;
    }

但这会创建 3 个新的饼图,而不是 1 个饼图中的 3 个切片。我发现了这个问题how-to-create-a-pie-chart-with-livecharts,解决方案是有多个PieSeries,但我不知道如何使用我表中的行来做到这一点。

【问题讨论】:

    标签: c# pie-chart livecharts


    【解决方案1】:

    我找到了答案,而不是这样做:

    foreach (var item in dataMsgTypes)
        {
            values.Add(item.Amount);
            Lables.Add(item.MsgType);
        }
    
        MsgTypeDoughnut = new SeriesCollection
        {
            new PieSeries
            {
                Title = "Amount",
                Values = values,
                DataLabels = true
            }
        };
    

    我必须这样做:

    MsgTypeDoughnut = new SeriesCollection();
    foreach (var item in dataMsgTypes)
            {
                MsgTypeDoughnut.Add(new PieSeries
                {
                    Title = "test",
                    Values = new ChartValues<ObservableValue> { new ObservableValue(item.Amount) },
                    DataLabels = true,
                    Stroke = System.Windows.Media.Brushes.Transparent
                });
                Lables.Add("MsgType " + (item.MsgType));
            }
    

    这样,我的表格行中的数据将作为新切片而不是新的饼图添加到饼图中。

    【讨论】: