Это, безусловно, выглядит как ошибка в MSChart.
Но Если вы посмотрите правильно, возможно, за этим стоит определенная логика.
Кажется, что происходит следующее: на диаграмме empty DataPoints
отображается не с их действительными значениями y, а с одной из последней непустой точкой перед ними.
Результат выглядит глупо, поэтому в вашем случае это работает как ошибка. Otoh, то, как вы используете свойство IsEmpty
, равно , а не , для чего означает : он предназначен для пометки некоторых частей данных как «отсутствующих»; поэтому предполагается, что эти точки в любом случае не имеют действительного значения y. Но для многих типов диаграмм это может привести к странным результатам, поэтому переносит последнее действительное значение ..
Классическим примером являются графики с ежедневными данными, но без значимых данных по выходным. Если пропущенные данные пропущены, некоторые вещи не будут работать, поэтому вставляются пустые фиктивные точки. (На самом деле есть даже функция для этого.)
(Обратите внимание, что это только моя интерпретация, а не документированная особенность!)
Это не приведет к смешному экрану, который вы видите, поскольку вы установили EmptyPointStyle.Color
на Transparent
. Но: теперь вы меняете цвета для всех точек , и это переопределяет цвет из стиля серии и вуаля: Забавный дисплей ..:

Решение:
Вы можете добавить строку кода в функцию Rescale
, чтобы снова сделать точки Transparent
на индивидуальной основе, а затем вызвать ее из кода UnHide
. (*)
Или вы можете вообще прекратить (ab) использование свойства IsEmpty
и «спрятать» точки, установив для их цвета значение Прозрачный.
(*) Также обратите внимание на цитату из вашей ссылки: Вы всегда можете вернуться к использованию цветов палитры, установив для свойств (Data Series и) DataPoint Color значение Color.Empty. (Мои скобки)
Обновление (*): Я думаю, что лучший способ сделать раскраску - включить проверку свойства IsEmpty
следующим образом:
if (p.IsEmpty) p.Color = Color.Empty;
else ..