windows C#,数据可视化,图表:将自定义标签指定给轴上的值

6bc51xsx  于 2023-10-22  发布在  Windows
关注(0)|答案(4)|浏览(261)

在C#中,我使用DataVisualization.Charting库进行绘图。在一个简单的线图中,我想在x轴上的位置x=0,1,2,3显示一些自定义文本。
类似这样的东西(在matplotlib中):

This是Axis类的文档,但我不确定应该查找什么。

4dbbbstv

4dbbbstv1#

使用DataPointAxisLabel属性。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= Slog:

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使用图表内显示的数据点标签。

2ul0zpep

2ul0zpep2#

只需添加带有这些标签的点作为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);
sc4hvdpw

sc4hvdpw3#

您需要在坐标轴上设置LabelStyle的“Format”属性。
参见:http://msdn.microsoft.com/en-us/library/system.web.ui.datavisualization.charting.labelstyle(v=vs.110).aspx
如果你搜索的话,有一些关于使用图表库的合理教程。这里有一个:http://weblogs.asp.net/dwahlin/getting-started-with-the-asp-net-3-5-chart-control

ldxq2e6h

ldxq2e6h4#

我无意中进入这个线程,而寻找类似的问题的解决方案-我想要一个简单的解决方案,对主X轴上的标签有完全的控制。
我所需要的就是使用CustomLabels,例如:

double mPtr = 0.0;
double stepMeter = 1000;
double distanceMeter = 14200;
while (mPtr < distanceMeter)
{
    var customLabel = new CustomLabel();
    customLabel.FromPosition = mPtr - stepMeter / 3;
    customLabel.ToPosition = mPtr + stepMeter / 3;
    customLabel.Text = $"{(mPtr / 1000.0):f1} km";

    chart1.ChartAreas[0].AxisX.CustomLabels.Add(customLabel);

    mPtr += stepMeter;
}

顺便说一下,目前我正在使用这个Nuget包[https://github.com/kirsan31/winforms-datavisualization],VS 2002/ .NET 7。包含很大的性能改进。

相关问题