IsXValueIndexed заставляет линии графика не рисовать - PullRequest
0 голосов
/ 09 июня 2018

Так есть диаграмма с 2 областями диаграммы и 3 рядами.Верхняя область графика имеет 2 серии.1-я серия показывает цены с течением времени, а 2-я серия в верхней области графика показывает прибыль на акцию за одно и то же время

В нижней области графика есть 1 серия и объем за одно и то же время.

Все 3 серии имеют одинаковое количество очков.Для всех трех серий XValueType установлено значение Date.

Когда данные представляют собой ежедневные цены на акции, в выходные дни возникают разрывы, и они хотели бы подавить.Так что для этого нужно установить IsXValueIndexed в true.Если мы сделаем это, график будет отображаться, но ни одна из линий не отобразится ни на графике цены графика объема.

Насколько я понимаю, для работы IsXValueIndexed каждая серия должна иметь одинаковое количество точек, причем у всех одинаковая дата в одной и той же точке вдоль оси X.Они делают.

Что еще я мог пропустить?

1 Ответ

0 голосов
/ 09 июня 2018

Единственное объяснение описываемого вами эффекта состоит в том, что вы установили Maximum&Minimum значения для оси X.

MSDN:

Series.IsXValueIndexed

Получает или задает флаг, который указывает, будут ли индексы точек данных использоваться для значений X

Вы правильно поняли другие правила (например, о выравнивании рядов), ноэто простое утверждение подразумевает, что фактические значения x теперь игнорируются ;они все еще могут использоваться для форматирования меток, а также для расчета содержимого (см. ниже!), но когда дело доходит до размещения точек данных вдоль оси, они все заменяются индексами 0,1,2..

.вы установили для XAxis.Minimum&Maximum больше не будет работать должным образом: DateTimes в ваших точках внутренне огромных удваивается;индекс никак не может быть там достигнут, если только ваши даты не указаны с начала DateTime (1 января, 0001) времени.

Вы можете проверить, сбросив значения Minimum/Maximum:

 Axis ax = someChartArea.AxisX;

 ax.Minimum = double.NaN;
 ax.Maximum = double.NaN;

Но если вы установили их, они, вероятно, понадобятся.Таким образом, вам может потребоваться рассчитать индексы для использования вместо;Вот пример:

Series s = yourSeries;

var p1 = s.Points.Where(x => x.XValue > ax.Minimum).First();
var p2 = s.Points.Where(x => x.XValue <= ax.Maximum).Last();

ax.Minimum = s.Points.IndexOf(p1);
ax.Maximum = s.Points.IndexOf(p2) + 1;

Но, возможно, более простая схема пойдет хорошо или лучше, когда дело доходит до, например, пейджинга.

Давайте посмотрим:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...