图表控件 - x轴上的字符串

时间:2018-03-02 09:56:41

标签: c# winforms mschart datapoint

如何在图表控件的x轴上显示字符串值?数据点(x& y)都是双倍的。我有一个IEnumerable包含一个具有2个属性的对象列表。报告的名称和一个整数值,表示运行的次数。所以整数在y轴上,报告名在x轴上。但我似乎只有值类型的双选项。所以当我创建我的数据点时,我发现了一个错误

DataPoint p1 = new DataPoint();
p1.XValue = log.ReportName; ---> this is invalid
p1.YValues = new Double[] { log.ReportTotal };

怎么办呢?

我试过这个

reportTotal.XValueType = ChartValueType.String;

当我绘制数据点时,我已经完成了这个

        int i = 1;
        foreach (var log in this._reportLogs)
        {
            DataPoint p1 = new DataPoint();
            p1.XValue = (double)i;
            p1.YValues = new Double[] { log.ReportFrequency };
            i++;
            reportTotal.Points.Add(p1);

        }

但是现在所有im沿着x轴都是i变量的数量,我到底是怎么得到文本属性的内容?

这就是我的工作方式

Dictionary<string, int> ReportLogs = new Dictionary<string, int>();

foreach (var log in this._reportLogs)
      ReportLogs.Add(log.ReportName, log.ReportFrequency);

foreach (KeyValuePair<string, int> log in ReportLogs)
       reportTotal.Points.AddXY(log.Key, log.Value);

1 个答案:

答案 0 :(得分:0)

轴上的标签是根据x值创建的,它们的编号可以根据需要自动确定,也可以通过设置x轴的Interval属性来确定。

因此,他们的展示位置不一定与实际的DataPoints一致。

您可以格式化它们,但只能在正常的格式规则中进行格式化,即您无法通过表达式将数字转换为自定义字符串,这似乎正是您想要的:显示报告名称它的数量。

其他示例可以通过其邮政编码显示城市或根据emp.ID ..

显示人名

要获得完全控制权,您可能需要使用CustomLabels。它们有点棘手但非常有用。有很多例子,请参阅several of these posts

另请注意:如果您将x值类型更改为字符串( 可能:yourseries.XValueType = ChartValueType.String),这些字符串将直接显示,但您会丢失实际的x值!通常不推荐(但在你的情况下可能没问题)!

所以如果你想做到的话;但是你不能像你那样准备DataPoint。相反,您需要使用Points.AddXY方法。

这会将字符串转换为double(产生零)并将字符串复制到标签中..:

  reportTotal.Points.AddXY(log.ReportName, new Double[] { log.ReportTotal });

<强>更新

另一种方法是设置每个AxisLabel的{​​{1}}。要显示所有这些内容,您可能需要设置DataPoint

所以在你的循环中只需添加

yourxaxis.Interval = 1