Silverlight Toolkit LineSeries соединяет точки данных случайным образом

Я пытаюсь визуализировать линейный график, но LineSeries соединяет точки данных случайным образом каждый раз, когда я перерисовываю график.

Источником моих предметов является типизированный список моих пользовательских классов, которые имеют 2 свойства: одно для оси x и одно для оси y (оба являются "двойными" значениями). Значения этих свойств не меняются и загружаются один раз.

Мои линии имеют несколько прямых, вертикальных скачков, то есть значение оси x одинаково для 3 или 4 точек, но значение y изменяется. Это правильно соединяет эти точки с прямой, вертикальной линией.

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

Я хотел бы предположить, что он использует первую точку, основанную на порядке источника элементов для соединения слева и последней точке для соединения справа.

Источник элементов всегда в том же порядке, в котором я хочу, чтобы они были подключены.

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

        LineSeries ser = new LineSeries();
        Chart.Series.Add(ser);
        ser.DependentValuePath = "YAxis";
        ser.IndependentValuePath = "XAxis"
        ser.ItemsSource = data.Coordinates;

Кто-нибудь знает, почему это происходит? Спасибо за любые предложения.

2 ответа

Решение

Это потому, что диаграмма основана на независимых значениях, а не на зависимых значениях. У меня была похожая проблема с моей "ленточной диаграммой". Это так, как задумано. Думайте о своем графике как о том, что график x против y перевернулся вбок. Теперь вы можете видеть, как он строит. Изменение порядка точек на основе y ничего не делает.

Я не думаю, что Telerik имеет это ограничение.

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

Простое вращение графика казалось лучшей идеей - но у него все еще было несколько проблем с графиками (и моя легенда также была повернута).

Я не очень хорошо разбираюсь в C#, поэтому я создал шаблон элемента управления в стиле Chart. Я вошел в шаблон и повернул крайнюю панель диаграммы. Ниже приведен очень краткий и общий пример:

<Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="charting:Chart">
         <Border Background="{TemplateBinding Background}" 
                 BorderBrush="{TemplateBinding BorderBrush}"
                 BorderThickness="{TemplateBinding BorderThickness}">
              <Grid>

Я не помещаю здесь весь код, но полный шаблон для диаграммы можно найти по адресу http://silverlight.codeplex.com/SourceControl/changeset/view/80285

                   <chartingprimitives:EdgePanel x:Name="ChartArea" 
                                       Style="{TemplateBindingChartAreaStyle}"
                                       RenderTransformOrigin="0.5,0.5">
                        <chartingprimitives:EdgePanel.RenderTransform>
                            <CompositeTransform Rotation="90"/>
                        </chartingprimitives:EdgePanel.RenderTransform>        
                   </chartingprimitives:EdgePanel>
                     <Grid x:Name="PlotArea" Canvas.ZIndex="-1"
                           RenderTransformOrigin="0.5,0.5" />
                     <Border Canvas.ZIndex="10" BorderBrush="Gray" 
                             BorderThickness="1"/>
              </Grid>
          </Border>
      </ControlTemplate>
    </Setter.Value>
</Setter>

Таким образом, вся область построения графика была перевернута, что позволило диаграмме построить график вниз, вместо того, чтобы вывести данные на график вправо. (У меня была та же проблема с линиями, которые не отображались правильно и были ошибочны, в каком порядке они хотели соединить точки)

Это помогло с моей диаграммой (была необходимость в настройке, но это дает общее представление о том, что я смог выяснить). Надеюсь, что это несколько полезно для вас.

Другие вопросы по тегам