У меня есть следующий код. Я жестко запрограммировал значения x и y для проверки. И по какой-то причине для точки (0, -0.5) она отображает (1, -0.5). Для жизни меня я не знаю, что происходит, потому что если вы попробуете другие значения, тогда граф отображается правильно.
foreach (var grp in q)
{
point = new DataPoint();
Sum1 = grp.Sum1 > 2 ? 2 : grp.Sum1;
Sum1 = Sum1 < -2 ? -2 : Sum1;
Sum2 = grp.Sum2 > 2 ? 2 : grp.Sum2;
Sum2 = Sum2 < -2 ? -2 : Sum2;
point.XValue = 0;
point.YValues = new double[] { -0.5 };
chart1.Series.Add(grp.Id.ToString());
chart1.Series[grp.Id.ToString()].ChartType = SeriesChartType.Point;
chart1.Series[grp.Id.ToString()].Label = grp.Id.ToString();
chart1.Series[grp.Id.ToString()].Points.Add(point);
chart1.Series[grp.Id.ToString()].ToolTip = "THEMES = " + Sum1 + "\n PRICES = " + Sum2;
chart1.Series[grp.Id.ToString()].LabelToolTip = "THEMES = " + Sum1 + "\n PRICES = " + Sum2;
chart1.Series[grp.Id.ToString()].MarkerSize = 11;
chart1.Update();
if (grp.Id.ToString() == "WW" || grp.Id.ToString() == "PB"
|| grp.Id.ToString() == "AJ" || grp.Id.ToString() == "AK")
{
avgTheme += (float)Sum1;
avgPrice += (float)Sum2;
count++;
}
}
ОБНОВИТЬ:
эта строка должна быть добавлена, работает только с.NET 4.5
chart1.Series["ABC"].CustomProperties = "IsXAxisQuantitative=True";
Это действительно странно! Похоже, очень сложно поверить в ошибку. Я играл, но могу только подтвердить, что, похоже, нет способа установить одну Point
в позицию 0 в Series
.
Вот глупо обходное решение:
S1.ChartType = SeriesChartType.Point;
for (int i=0; i < 2; i++)
{
DataPoint point = new DataPoint();
point.SetValueXY(i, -0.5);
if (i > 0) point.Color = Color.Transparent;
S1.Points.Add(point);
}
Хотел бы я знать, что это такое - Chart
настолько плохо документирована, что может быть какая-то система безумия..
Обновление: когда вы добавляете Timer
и даете его Tick
удалить прозрачную 2-ю Point
, вы можете увидеть, как 1-я Point
перепрыгивает с 0 на 1. Так странно..
Ага...
Это не ошибка. Это правильное поведение для SERIESCHARTTYPE.POINT диаграммы.
Цель диаграммы - показать [b] ряд [/b] значений {слева направо}, а не набор точек X, Y.
Серийное значение 1 - значение 4-й серии 2 - 1-е значение 3, равное 6, и так далее.
Таким образом, ошибка не в диаграмме, а в понимании, для чего предназначен тип диаграммы и предназначен для использования.
Вы можете видеть здесь, как каждый элемент массива использует только значение y для этой точки.
Может быть, вы хотите нарисовать несколько точек? Может быть, вы путаете диаграмму с графиком? Если вы пытаетесь использовать графики, это может помочь: https://www.daniweb.com/software-development/csharp/code/217204/function-plotting-in-c
S1.ChartType = SeriesChartType.FastLine; S1.Points.AddXY(1, 0); S1.Points.AddXY(1, 5);
и попробуйте это: S1.ChartType = SeriesChartType.FastLine; S1.Points.AddXY(0, 0); S1.Points.AddXY(0, 5);
а теперь объясни!