2016-05-16 5 views
2

Я использую график динамических данных (v0.4), и я хочу добавить маркер круга в определенную точку данных серии, чтобы выделить положение максимального значения графика.Как добавить маркер в определенную точку на графике отображения динамических данных?

Принимая во внимание очень небольшое количество документации и примеров, предоставленных разработчиками Dynamic Data Display, Кто-нибудь знает, как добавить маркер в определенную точку?

UPDATE

Поскольку v0.4 не d3:CircleMarkerGraph, и я хотел бы использовать эту версию вместо v0.3 (возвращаясь также требует корректировки кода), я попытался следующие:

Вид:

<d3:ChartPlotter x:Name="spectrumPlot" /> 
    <d3:LineGraph x:Name="spectrumLineGraph" DataSource="{Binding SpectrumPlotData}"/> 
    <d3:MarkerPointsGraph x:Name="spectrumMarkers" DataSource="{Binding SpectrumMarkersData}" /> 
</d3:ChartPlotter> 

ViewModel:

private IPointDataSource _spectrumMarkersData; 
    public IPointDataSource SpectrumMarkersData 
    { 
     get { return _spectrumMarkersData; } 
     set 
     { 
      _spectrumMarkersData = value; 
      OnPropertyChanged("SpectrumMarkersData"); 
     } 
    } 

private void UpdatePlotData() 
    { 
     EnumerableDataSource<double> xDataSource, yDataSource; 
     xDataSource = new EnumerableDataSource<double>(SignalProcessor.Instance.GetXAxisSpectrum()); xDataSource.SetXMapping(X => X); 
     yDataSource = new EnumerableDataSource<double>(SignalProcessor.Instance.GetYAxisSpectrum()); yDataSource.SetYMapping(Y => Y); 
     SpectrumPlotData = new CompositeDataSource(xDataSource, yDataSource); 
     SpectrumMarkersData = new CompositeDataSource(xDataSource, yDataSource); 
    } 

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

ответ

2

В версии online tutorial для версии Silverlight в разделе «Графики с несколькими графами» они используют второй график для маркировки определенных элементов. То есть маркеры накладываются на график как второй график.

Версия WPF, которую вы можете скачать в исходной форме от CodePlex (самая последняя загружаемая версия v0.3), не раскрывает те же объекты или пространства имен, что и версия Silverlight.

Предполагая простой список точек данных, где координата X является индексом элемента в массиве. Маркеры используют объекты Point для отображения и индекса X до значения точки Y. Это значит, что вам не нужно иметь маркер для каждого элемента в наборе данных. Вам нужно будет самостоятельно реализовать GetDataPoints() и GetMarkPoints() или использовать любые коллекции, которые у вас уже есть.

C# кода, например:

public partial class GraphView : UserControl 
{ 
    public GraphView() 
    { 
     InitializeComponent(); 

     // Get the data and mark points. 
     double dataPoints[] = GetDataPoints(); 
     Point markPoints[] = GetMarkPoints(); 

     // Plot the data. 
     line.Plot(dataPoints); 

     // Plot the markers. 
     markers.Plot(markPoints); 
    } 
} 

, И (Silverlight) XAML:

<UserControl x:Class="GraphView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d3="clr-namespace:Microsoft.Research.DynamicDataDisplay;assembly=DynamicDataDisplay.Silverlight" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 
     <d3:Chart> 
      <Grid> 
       <!-- Plot line graph --> 
       <d3:LineGraph Name="line" 
           Description="Actual data" 
           Stroke="Green"/>     
       <!-- Plot additional points over line graph --> 
       <d3:CircleMarkerGraph Name="markers" 
             Description="Interesting points" 
             Size="5" Color="Black"/> 
      </Grid> 
     </d3:Chart> 
    </Grid> 
</UserControl> 
+1

Спасибо за это решение. Однако, прежде чем возвращаться к v0.3, я хотел бы еще раз попробовать v0.4. Пожалуйста, уточните мой обновленный вопрос. –