如何在图表控件的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);
答案 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