我看过“类似”的问题,但实际上找不到任何适用的东西,令人惊讶。我使用导入的转换数据计算了我想在Mschart折线图上创建的数据点数。使用这个结果,我将它除以另一个变化的数字,这是我想要在每个数据点之间的空间。 124是常数。
300(变化)/ 124(X轴)= 2.419354838709677(这是我想要的每个点之间的空间)
我想过像这样创建一个for循环
for (double i = 1; i < samples_hd; i++)
{
// distribute data points evenly here
}
一个文件将被读入图表,到目前为止我手动添加了数据点,因为我根本不确定如何添加它们如上^。
var sn = new System.Windows.Forms.DataVisualization.Charting.Series(English.Sam_Num);
sn.ChartType = SeriesChartType.Line;
sn.Points.Add(new DataPoint(9, 30));
sn.Points.Add(new DataPoint(150, 28));
sn.XAxisType = AxisType.Primary;
Chart_Line.Series.Add(sn);
Chart_Line.ChartAreas[0].AxisX.Minimum = 0;
Chart_Line.ChartAreas[0].AxisX.Maximum = 124;
Chart_Line.ChartAreas[0].AxisX.Interval = 15;
Chart_Line.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
答案 0 :(得分:0)
花了这么长时间让它工作,但它确实有效:)我的图表实际上有3个系列,但是对于这个例子,我只会展示2个系列。
private void Main(byte[] rec_arr)
{
var series1 = new Series("series1");
series1 .ChartType = SeriesChartType.Line;
series1 .MarkerStyle = MarkerStyle.Circle;
series1 .MarkerSize = 3;
series1 .YAxisType = AxisType.Primary;
series1 .Color = Color.Navy;
var series2 = new Series("series2");
series2 .ChartType = SeriesChartType.Line;
series2 .MarkerStyle = MarkerStyle.Triangle;
series2 .MarkerSize = 3;
series2 .YAxisType = AxisType.Primary;
series2 .Color = Color.Crimson;
foreach (var series in Chart1.Series)
{
series.Points.Clear();
}
double interval1 = 0;
double interval2 = File_Details.time / (double)124;
int Offset2 = 502;
int Offset3 = 750;
float data1, data2;
if (File_Details.time == 0)
{
Label_Error_Graph.Visible = true;
Chart1.ChartAreas[0].AxisX.Maximum = 0;
Chart1.ChartAreas[0].AxisX.Minimum = 0;
Chart1.Series[0].Points.Add(0);
Chart1.Series[1].Points.Add(0);
}
else
{
Label_Error_Graph.Visible = false;
}
for (interval1 = 0; interval1 < File_Details.time; interval1 += interval2)
{
data1 = DecodeSingle(rec_arr, Offset3);
if (Chart1.Series.IndexOf("series1") == -1)
{
Chart1.Series.Add(series1);
}
Offset3 = Offset3 + 2;
if (data1 < 300)
{
Chart1.Series[0].Points.AddXY(interval1, supply);
}
else
{
Chart1.Series[0].Points.AddXY(interval1, 300);
}
}
for (interval1 = 0; interval1 < File_Details.time; interval1 += interval2)
{
data2 = DecodeSingle(rec_arr, Offset2) / (float)100;
if (Chart1.Series.IndexOf("series2") == -1)
{
Chart1.Series.Add(series2);
}
Offset2 = Offset2 + 2;
if (data2 < 150)
{
Chart1.Series[1].Points.AddXY(interval1, data2);
}
else
{
Chart1.Series[1].Points.AddXY(interval1, 150);
}
}
}