我有一个图表区域和特定比例的特定位置来正确查看数据,我不想使用Autoscale
我想要的是,如果点> 'chart.ChartAreas [0] .AxisX.Maximum' 使用新的X轴刻度再次重新绘制该点。更改线条颜色,以便我可以识别其超量程
我的第一个比例0 --- 90 我的规模超过90 ---- 180
如你所见
我想删除这一点,然后用90到180的红色线条再次绘制它,然后完成我的前进点正常
这是我的代码我尝试了两个不同的系列,但没有工作,我错过了一些东西,我正在从csv文件中读取数据(nLines代表行号)
for (int j = 0; j < nLines; j++)
{
chart.Series["Series0"].Points.AddXY(data[j, indX], data[j, indY]);
chart.ChartAreas[0].AxisY.IsReversed = true;
chart.ChartAreas[0].AxisX.Minimum = 0;
chart.ChartAreas[0].AxisX.Maximum = 90;
chart.Series["Series0"].Color = Color.Blue;
chart.Series["Series0"].BorderWidth = 2;
List<DataPoint> lst = chart.Series["Series0"].Points.ToList<DataPoint>();
if (lst[j].XValue > 90)
{
chart.Series["Series15"].ChartType = SeriesChartType.StepLine;
chart.Series["Series15"].Points.AddXY(data[j, indX], data[j, indY]);
chart.Series["Series15"].XAxisType = AxisType.Secondary;
chart.ChartAreas[0].AxisX2.Minimum = 90;
chart.ChartAreas[0].AxisX2.Maximum = 180;
chart.ChartAreas[0].AxisX2.MajorGrid.Enabled = false;
chart.ChartAreas[0].AxisX2.MinorGrid.Enabled = false;
chart.Series["Series15"].Color = Color.Red;
chart.Series["Series15"].BorderWidth = 2;
}
}
答案 0 :(得分:2)
有多种方法可以做到这一点,但最简单的方法是使用技巧:
由于任何一个 Chartarea
只能显示一个比例和值范围,我们使用两个 Chartareas
和叠加他们。
一个具有正常范围,另一个具有溢出范围。
现在我们将所有数据添加到两个系列:正常图表区域中的一个,以及溢出区域中的一个..
结果如下:
以下是准备Chart
:
ChartArea ca1 = chart1.ChartAreas[0];
// the regular axis label interval and range
ca1.AxisX.Interval = 10;
ca1.AxisX.Minimum = 0;
ca1.AxisX.Maximum = 100;
// we add an extra chartarea
ChartArea ca2 = chart1.ChartAreas.Add("ca2");
// we align it..
ca2.AlignmentOrientation = AreaAlignmentOrientations.All;
ca2.AlignWithChartArea = ca1.Name;
// ..but we also need to set the position
// we create a hard coded element position that leaves room for labels and legend
ca1.Position = new ElementPosition(0, 0, 80, 90); // 80% width
ca2.Position = new ElementPosition(0, 0, 80, 90); // 90% height
// we make the overlayed area transparent
ca2.BackColor = Color.Transparent;
// it needs a series to display the overflowing points
Series S22 = chart1.Series.Add("OverFlow");
S22.ChartType = SeriesChartType.StepLine;
S22.Color = Color.Red;
S22.ChartArea = "ca2";
其余的基本上只是造型轴。
// we want to show a secondary axis on top:
ca2.AxisX2.Enabled = AxisEnabled.True;
// don't disable the primary axis if you want any labels!
// instead make its labels transparent!
ca2.AxisX.LabelStyle.ForeColor = Color.Transparent;
// this is shared by the sec.axis event though it has its own property!
ca2.AxisX.LabelStyle.Interval = 10;
// I color the axis and the labels
ca2.AxisX2.LineColor = S22.Color;
ca2.AxisX2.LabelStyle.ForeColor = S22.Color;
// we need to set the range for both (!) axes:
ca2.AxisX2.Minimum = 100;
ca2.AxisX2.Maximum = 200;
ca2.AxisX.Minimum = 100;
ca2.AxisX.Maximum = 200;
现在,您可以将值添加到未修改的两个系列中。
我使用范围0-100和100-200。当然,你的工作也会奏效。另外:如果您不需要Legend
,您可以将宽度从80%扩大到90%或更多..
这比在同一个图表区域中仅将溢出点添加到另一个系列要容易得多,因为看起来很好,还需要通过在恰当的位置添加透明的额外点来防止间隙和错误连接。