【发布时间】:2014-12-30 05:29:19
【问题描述】:
在 C# 中,我使用 DataVisualization.Charting 库进行绘图。
在一个简单的折线图中,我想在 x=0、1、2、3 位置的 x 轴上显示一些自定义文本。
类似这样的东西(尽管在 matplotlib 中):
This 是 Axis 类的文档,但我不确定应该查找什么。
【问题讨论】:
标签: c# windows charts data-visualization axes
在 C# 中,我使用 DataVisualization.Charting 库进行绘图。
在一个简单的折线图中,我想在 x=0、1、2、3 位置的 x 轴上显示一些自定义文本。
类似这样的东西(尽管在 matplotlib 中):
This 是 Axis 类的文档,但我不确定应该查找什么。
【问题讨论】:
标签: c# windows charts data-visualization axes
使用DataPoint 的AxisLabel 属性。 AxisLabel属性说明:
获取或设置数据点、系列的X轴标签的文本 或空点。此属性仅在自定义标签具有 没有为相关的 Axis 对象指定。
所以您的代码可以如下所示:
DataPoint dp1 = new DataPoint(1, 1);
dp1.AxisLabel = "Frogs";
DataPoint dp2 = new DataPoint(2, 4);
dp2.AxisLabel = "Hogs";
DataPoint dp3 = new DataPoint(3, 9);
dp3.AxisLabel = "Bogs";
DataPoint dp4 = new DataPoint(4, 6);
dp4.AxisLabel = "Slogs";
chart1.Series[0].Points.Add(dp1);
chart1.Series[0].Points.Add(dp2);
chart1.Series[0].Points.Add(dp3);
chart1.Series[0].Points.Add(dp4);
或者您可以使用以下代码强制执行 1=Frogs、2=Hogs、3=Bogs 和 4=Slogs:
chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
chart1.Series[0].MarkerStyle = MarkerStyle.Circle;
chart1.Series[0].MarkerBorderColor = System.Drawing.Color.Black;
chart1.Series[0].MarkerColor = System.Drawing.Color.Red;
chart1.Series[0].Points.AddXY(1, 1);
chart1.Series[0].Points.AddXY(2, 4);
chart1.Series[0].Points.AddXY(3, 9);
chart1.Series[0].Points.AddXY(4, 6);
foreach (DataPoint dp in chart1.Series[0].Points)
{
switch ((int)dp.XValue)
{
case 1: dp.AxisLabel = "Frogs"; break;
case 2: dp.AxisLabel = "Hogs"; break;
case 3: dp.AxisLabel = "Bogs"; break;
case 4: dp.AxisLabel = "Slogs"; break;
}
}
要实现与图片上的完全相同 - 两侧的轴 - 您需要使用 the following trick。
它仅适用于 X 轴,对于 Y 轴,您可以添加自定义标签,如 here 所述。
您还可以使用IsValueShownAsLabel 来使用图表内出现的数据点标签。
【讨论】:
dp.AxisLabel = "something" 时,您没有指定应将标签添加到哪个轴。在您链接的文档中,它说它用于 x 轴。 y轴的等价物是多少?我第一篇文章中的图片只是一个例子,我认为将这个例子适应我的情况会很简单。 ://
只需将带有这些标签的点添加为 x 值:
chart1.Series[0].Points.AddXY("Frogs", 1);
chart1.Series[0].Points.AddXY("Hogs", 4);
// etc
或者,您可以使用两个数组对点进行数据绑定:
string[] xvalues = new [] {"Frogs", "Hogs", "Bogs", "Slogs"};
int[] yvalues = new [] {1, 4, 9, 6};
chart1.Series[0].Points.DataBindXY(xvalues, yvalues);
【讨论】:
您需要在轴上设置 LabelStyle 的“格式”属性。
如果您搜索它们,那里有一些关于使用图表库的合理教程。这是一个:http://weblogs.asp.net/dwahlin/getting-started-with-the-asp-net-3-5-chart-control
【讨论】:
Format 不会将整数更改为字符串。
(2,0), (3,1), (0,3), (3, 4), (2, 5) 之类的点,在 x 轴上,它将在位置 1 上显示“青蛙”,在位置 2 上显示“猪”,等等开吗?