C# - Chart.Series[index].Points.Label 不生成任何数据点标签
C# - Chart.Series[index].Points.Label not producing any label of datapoint
我有一个图表有 9 个不同的系列,其中只有两个可以同时启用。
我的用户要求当第一个数据点添加到图表时,它被标记为 'Start',这将启用允许用户标记 'End' 的按钮。
在解决方案的开发过程中,这不是问题,因为我可以随时控制启用哪个系列。现在已经为用户添加了在 'Options' 菜单中更改它的工具(系列名称和启用状态写入 'Settings' 文件,然后在下次程序开始时读取。
为了尝试这样做,我在我的 updateChart 函数中创建了一个 List<> 'enabledSeries',用于查找启用的图表系列并将它们添加到列表中。这已经做得很好,并且使用这种方法可以将数据点添加到图表中。但是,出于某种原因,标签现在不会出现在每个系列的开头。
updateChart() 及其子函数的代码如下所示:
public void updateChart(int minutesElapsed)
{
//int latestReading = 0; //local variable to hold va1ue from txtBP.Text
chartVitals.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True;
chartVitals.Text = "Vitals Visual";
//Create correct coordinate using reading and time taken
//add newest (last) element in each list to respective chart series, along with value from timer
chartVitals.Series["Heart Rate"].Points.AddXY(minutesElapsed, HRlist.Last());
chartVitals.Series["Ventilation Rate"].Points.AddXY(minutesElapsed, VRlist.Last());
chartVitals.Series["Blood Pressure"].Points.AddXY(minutesElapsed, BPlist.Last());
chartVitals.Series["o2 Saturation"].Points.AddXY(minutesElapsed, BOlist.Last());
chartVitals.Series["ET Co2"].Points.AddXY(minutesElapsed, ETCo2list.Last());
chartVitals.Series["Vaporiser Setting"].Points.AddXY(minutesElapsed, VSlist.Last());
chartVitals.Series["FI Agent"].Points.AddXY(minutesElapsed, FIAlist.Last());
chartVitals.Series["ET Agent"].Points.AddXY(minutesElapsed, ETAlist.Last());
chartVitals.Series["Fresh Gas Flow"].Points.AddXY(minutesElapsed, FGFlist.Last());
//stores all enabled series (MAX 2)
List<string> enabledSeries = new List<string>();
//identify and isolate the enabled series in the chart
identifyEnabled(enabledSeries);
}
public void identifyEnabled(List<string> enabledSeries)
{
//takes name of chart series at current index
string seriesName = "";
//access all items in list
for (int index = 0; index < chartVitals.Series.Count; ++index)
{
//assign name to variable
seriesName = chartVitals.Series[index].Name;
//series with this name is enabled
if (chartVitals.Series[seriesName].Enabled)
{
//add name to list
enabledSeries.Add(seriesName);
}
}
formatEnabled(seriesName, enabledSeries);
}
public void formatEnabled(string seriesName, List<string> enabledSeries)
{
//color series in by index (0 - blue, 1 - red)
string blueSeries = enabledSeries.First();
string redSeries = enabledSeries[enabledSeries.IndexOf(blueSeries) + 1];
//access all elements in enabledSeries
for (int enabledIndex = 0; enabledIndex < enabledSeries.Count; ++enabledIndex)
{
//access all series in chartVitals
for (int seriesIndex = 0; seriesIndex < chartVitals.Series.Count; ++seriesIndex)
{
//when there is item in series
if (chartVitals.Series[seriesName].Points.Count > 0)
{
string start = "[Start]";
//set series type as line
chartVitals.Series[seriesName].ChartType = SeriesChartType.Line;
//apply label to first point of series
chartVitals.Series[seriesName].Points.First().Label = start;
//enable button to mark end
btnOpEnd.Enabled = true;
}
}
}
//apply colours to series
chartVitals.Series[blueSeries].Color = Color.Blue;
chartVitals.Series[redSeries].Color = Color.Red;
}
代码有点复杂,但是有注释,应该都有。如果有人能指出可能导致问题的原因或更简单的处理方法,我将不胜感激!
谢谢,
马克
这是您希望看到的吗?
编辑:我将formatEnabled
更改为使用seriesIndex
而不是seriesName
,如下所示:
public void formatEnabled(string seriesName, List<string> enabledSeries)
{
//color series in by index (0 - blue, 1 - red)
string blueSeries = enabledSeries.First();
string redSeries = enabledSeries[enabledSeries.IndexOf(blueSeries) + 1];
//access all elements in enabledSeries
for (int enabledIndex = 0; enabledIndex < enabledSeries.Count; ++enabledIndex)
{
//access all series in chartVitals
for (int seriesIndex = 0; seriesIndex < chartVitals.Series.Count; ++seriesIndex)
{
//when there is item in series
if (chartVitals.Series[seriesIndex].Points.Count > 0)
{
string start = "[Start]";
//set series type as line
chartVitals.Series[seriesIndex].ChartType = SeriesChartType.Line;
//apply label to first point of series
chartVitals.Series[seriesIndex].Points.First().Label = start;
//enable button to mark end
//btnOpEnd.Enabled = true;
}
}
}
//apply colours to series
chartVitals.Series[blueSeries].Color = Color.Blue;
chartVitals.Series[redSeries].Color = Color.Red;
}
我有一个图表有 9 个不同的系列,其中只有两个可以同时启用。
我的用户要求当第一个数据点添加到图表时,它被标记为 'Start',这将启用允许用户标记 'End' 的按钮。
在解决方案的开发过程中,这不是问题,因为我可以随时控制启用哪个系列。现在已经为用户添加了在 'Options' 菜单中更改它的工具(系列名称和启用状态写入 'Settings' 文件,然后在下次程序开始时读取。
为了尝试这样做,我在我的 updateChart 函数中创建了一个 List<> 'enabledSeries',用于查找启用的图表系列并将它们添加到列表中。这已经做得很好,并且使用这种方法可以将数据点添加到图表中。但是,出于某种原因,标签现在不会出现在每个系列的开头。
updateChart() 及其子函数的代码如下所示:
public void updateChart(int minutesElapsed)
{
//int latestReading = 0; //local variable to hold va1ue from txtBP.Text
chartVitals.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True;
chartVitals.Text = "Vitals Visual";
//Create correct coordinate using reading and time taken
//add newest (last) element in each list to respective chart series, along with value from timer
chartVitals.Series["Heart Rate"].Points.AddXY(minutesElapsed, HRlist.Last());
chartVitals.Series["Ventilation Rate"].Points.AddXY(minutesElapsed, VRlist.Last());
chartVitals.Series["Blood Pressure"].Points.AddXY(minutesElapsed, BPlist.Last());
chartVitals.Series["o2 Saturation"].Points.AddXY(minutesElapsed, BOlist.Last());
chartVitals.Series["ET Co2"].Points.AddXY(minutesElapsed, ETCo2list.Last());
chartVitals.Series["Vaporiser Setting"].Points.AddXY(minutesElapsed, VSlist.Last());
chartVitals.Series["FI Agent"].Points.AddXY(minutesElapsed, FIAlist.Last());
chartVitals.Series["ET Agent"].Points.AddXY(minutesElapsed, ETAlist.Last());
chartVitals.Series["Fresh Gas Flow"].Points.AddXY(minutesElapsed, FGFlist.Last());
//stores all enabled series (MAX 2)
List<string> enabledSeries = new List<string>();
//identify and isolate the enabled series in the chart
identifyEnabled(enabledSeries);
}
public void identifyEnabled(List<string> enabledSeries)
{
//takes name of chart series at current index
string seriesName = "";
//access all items in list
for (int index = 0; index < chartVitals.Series.Count; ++index)
{
//assign name to variable
seriesName = chartVitals.Series[index].Name;
//series with this name is enabled
if (chartVitals.Series[seriesName].Enabled)
{
//add name to list
enabledSeries.Add(seriesName);
}
}
formatEnabled(seriesName, enabledSeries);
}
public void formatEnabled(string seriesName, List<string> enabledSeries)
{
//color series in by index (0 - blue, 1 - red)
string blueSeries = enabledSeries.First();
string redSeries = enabledSeries[enabledSeries.IndexOf(blueSeries) + 1];
//access all elements in enabledSeries
for (int enabledIndex = 0; enabledIndex < enabledSeries.Count; ++enabledIndex)
{
//access all series in chartVitals
for (int seriesIndex = 0; seriesIndex < chartVitals.Series.Count; ++seriesIndex)
{
//when there is item in series
if (chartVitals.Series[seriesName].Points.Count > 0)
{
string start = "[Start]";
//set series type as line
chartVitals.Series[seriesName].ChartType = SeriesChartType.Line;
//apply label to first point of series
chartVitals.Series[seriesName].Points.First().Label = start;
//enable button to mark end
btnOpEnd.Enabled = true;
}
}
}
//apply colours to series
chartVitals.Series[blueSeries].Color = Color.Blue;
chartVitals.Series[redSeries].Color = Color.Red;
}
代码有点复杂,但是有注释,应该都有。如果有人能指出可能导致问题的原因或更简单的处理方法,我将不胜感激!
谢谢, 马克
这是您希望看到的吗?
编辑:我将formatEnabled
更改为使用seriesIndex
而不是seriesName
,如下所示:
public void formatEnabled(string seriesName, List<string> enabledSeries)
{
//color series in by index (0 - blue, 1 - red)
string blueSeries = enabledSeries.First();
string redSeries = enabledSeries[enabledSeries.IndexOf(blueSeries) + 1];
//access all elements in enabledSeries
for (int enabledIndex = 0; enabledIndex < enabledSeries.Count; ++enabledIndex)
{
//access all series in chartVitals
for (int seriesIndex = 0; seriesIndex < chartVitals.Series.Count; ++seriesIndex)
{
//when there is item in series
if (chartVitals.Series[seriesIndex].Points.Count > 0)
{
string start = "[Start]";
//set series type as line
chartVitals.Series[seriesIndex].ChartType = SeriesChartType.Line;
//apply label to first point of series
chartVitals.Series[seriesIndex].Points.First().Label = start;
//enable button to mark end
//btnOpEnd.Enabled = true;
}
}
}
//apply colours to series
chartVitals.Series[blueSeries].Color = Color.Blue;
chartVitals.Series[redSeries].Color = Color.Red;
}