Диаграмма в winform показывает неверную точку

1

У меня есть следующий код. Я жестко запрограммировал значения 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++;
                }
            }

Изображение 174551

ОБНОВИТЬ:

эта строка должна быть добавлена, работает только с.NET 4.5

          chart1.Series["ABC"].CustomProperties = "IsXAxisQuantitative=True";
Теги:
forms
winforms
charts
mschart

2 ответа

1
Лучший ответ

Это действительно странно! Похоже, очень сложно поверить в ошибку. Я играл, но могу только подтвердить, что, похоже, нет способа установить одну 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. Так странно..

  • 0
    Сумасшедший человек ... это работает ... Я просто поставил скрытую точку на 1,1.
0

Ага...

Это не ошибка. Это правильное поведение для SERIESCHARTTYPE.POINT диаграммы.

Цель диаграммы - показать [b] ряд [/b] значений {слева направо}, а не набор точек X, Y.

Серийное значение 1 - значение 4-й серии 2 - 1-е значение 3, равное 6, и так далее.

Таким образом, ошибка не в диаграмме, а в понимании, для чего предназначен тип диаграммы и предназначен для использования.

Вы можете видеть здесь, как каждый элемент массива использует только значение y для этой точки.

Изображение 174551

Может быть, вы хотите нарисовать несколько точек? Может быть, вы путаете диаграмму с графиком? Если вы пытаетесь использовать графики, это может помочь: https://www.daniweb.com/software-development/csharp/code/217204/function-plotting-in-c

  • 0
    Я не понимаю Вы действительно читали вопрос? Попробуйте это: 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); а теперь объясни!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню