Неожиданные цвета точки установки побочного эффекта на графике xAxis - PullRequest
1 голос
/ 06 июня 2019

Я использую point.IsEmpty, чтобы скрыть определенные точки на графике (выбросы). У меня это работает хорошо, но я заметил кое-что странное. Если я восстановлю цвета диаграммы, то когда точка будет скрыта или скрыта, она появится в другом месте. Мне даже не нужно восстанавливать цвет; если я просто получаю и сохраняю одно и то же значение цвета, возникает побочный эффект.

Color c = SavedColoredPoints[i].Color;;

foreach (DataPoint p in ChartScatter.Series[i].Points)
{
    Debug.Assert(!p.Color.IsEmpty);  // want to show all have been initialized 
    Color ThisC = p.Color;
    p.Color = ThisC;
    // p.Color = c;
}

ChartScatter.Series[i].Color = c;

Приведенный выше код не запускается, так как все цвета инициализированы. При поиске в Интернете проблем с настройкой цвета в точках я обнаружил предложение использовать прозрачные для пустых точек, что я делал для всех своих серий. Это не имело никакого эффекта.

ChartScatter.Series[seriesname].EmptyPointStyle.Color = Color.Transparent;

Я также читал этот старый блог в Microsoft о настройке цветов точек: Настройка цветов серии диаграмм Microsoft

Пример задачи: в одной серии 12 пунктов. Если я отмечу все 12 точек «IsEmpty», они появятся на графике. Если я не восстановлю цвета по умолчанию, точки останутся скрытыми, как они должны:

RedDots

Красные точки выше не должны быть там. Если я «скрываю» исходные точки, они, как правило, появляются очень близко к тому месту, где они были удалены. Они на самом деле исчезают, но мгновенно оказываются рядом или как магия. Когда последний из 12 скрыт "IsEmpty", тогда все 12 появляются вокруг маркера 60 секунд. Все значения x и y верны, но они должны быть скрыты. OTOH, если я не "восстановил цвета по умолчанию", тогда, когда я их показываю, они остаются скрытыми, и диаграмма ведет себя так, как я хочу.

1 Ответ

0 голосов
/ 07 июня 2019

Это, безусловно, выглядит как ошибка в MSChart.

Но Если вы посмотрите правильно, возможно, за этим стоит определенная логика.

Кажется, что происходит следующее: на диаграмме empty DataPoints отображается не с их действительными значениями y, а с одной из последней непустой точкой перед ними.

Результат выглядит глупо, поэтому в вашем случае это работает как ошибка. Otoh, то, как вы используете свойство IsEmpty, равно , а не , для чего означает : он предназначен для пометки некоторых частей данных как «отсутствующих»; поэтому предполагается, что эти точки в любом случае не имеют действительного значения y. Но для многих типов диаграмм это может привести к странным результатам, поэтому переносит последнее действительное значение ..

Классическим примером являются графики с ежедневными данными, но без значимых данных по выходным. Если пропущенные данные пропущены, некоторые вещи не будут работать, поэтому вставляются пустые фиктивные точки. (На самом деле есть даже функция для этого.)

(Обратите внимание, что это только моя интерпретация, а не документированная особенность!)

Это не приведет к смешному экрану, который вы видите, поскольку вы установили EmptyPointStyle.Color на Transparent. Но: теперь вы меняете цвета для всех точек , и это переопределяет цвет из стиля серии и вуаля: Забавный дисплей ..:

enter image description here

Решение:

  • Вы можете добавить строку кода в функцию Rescale, чтобы снова сделать точки Transparent на индивидуальной основе, а затем вызвать ее из кода UnHide. (*)

  • Или вы можете вообще прекратить (ab) использование свойства IsEmpty и «спрятать» точки, установив для их цвета значение Прозрачный.

(*) Также обратите внимание на цитату из вашей ссылки: Вы всегда можете вернуться к использованию цветов палитры, установив для свойств (Data Series и) DataPoint Color значение Color.Empty. (Мои скобки)

Обновление (*): Я думаю, что лучший способ сделать раскраску - включить проверку свойства IsEmpty следующим образом:

if (p.IsEmpty)  p.Color = Color.Empty;
else ..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...