Per la visualizzazione di dati come questa mi piace molto DynamicDataDisplay. Il componente è attualmente mantenuto/sviluppato solo per Silverlight ma esiste una versione open source (in collegamento) per WPF che è davvero una grande libreria.
La libreria utilizza le raccolte IObservable
e supporta i valori degli assi DateTime
.
C'è un tipo di grafico marker incorporato (esempio sotto).
È possibile utilizzare marcatori personalizzati, supporta lo zoom e lo scorrimento, molte altre funzioni interessanti, ecc. È anche molto veloce, anche con serie di dati piuttosto grandi.
Poiché i set di dati sono IObservable
, il componente del grafico risponde dinamicamente alle modifiche nel set di dati sottostante in modo che il grafico venga aggiornato ogni volta che la raccolta di dati viene aggiornata.
EDIT
Ecco un esempio:
utilizza:
using System.ComponentModel;
using Microsoft.Research.DynamicDataDisplay;
using Microsoft.Research.DynamicDataDisplay.Charts;
using Microsoft.Research.DynamicDataDisplay.DataSources;
using Microsoft.Research.DynamicDataDisplay.PointMarkers;
principale:
public Window1()
{
InitializeComponent();
//
const int N = 100;
List<double> x = new List<double>();
List<double> y = new List<double>();
DateTimeAxis dtAxis = new DateTimeAxis();
_plotter.HorizontalAxis = dtAxis;
Random rand = new Random();
for (int i = 0; i < N; i++)
{ //generate some random data
x.Add(dtAxis.ConvertToDouble(DateTime.Now.AddDays(i)));
y.Add(rand.Next(N));
}
EnumerableDataSource<double> gX = new EnumerableDataSource<double>(x);
EnumerableDataSource<double> gY = new EnumerableDataSource<double>(y);
_MarkerGraph.DataSource = new CompositeDataSource(gX,gY);
//no scaling - identity mapping
gX.XMapping = xx => xx;
gY.YMapping = yy => yy;
CirclePointMarker mkr = new CirclePointMarker();
mkr.Fill = new SolidColorBrush(Colors.Red);
mkr.Pen = new Pen(new SolidColorBrush(Colors.Black),2.0);
_MarkerGraph.Marker = mkr;
}
XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d3="clr-namespace:Microsoft.Research.DynamicDataDisplay;assembly=DynamicDataDisplay"
Title="Window1" Height="481" Width="651">
<Grid>
<d3:ChartPlotter Name="_plotter">
<d3:MarkerPointsGraph Name="_MarkerGraph"/>
</d3:ChartPlotter>
</Grid>
uscita:
Le scale degli assi DateTime splendidamente, regolando le zecche per giorni, mesi, ore, secondi ... tutto ciò che è appropriato. Facile come torta!
Se si utilizza questo pacchetto, I altamente consiglia di scaricare l'origine e aggiungerlo come secondo progetto alla soluzione. La documentazione è molto scarsa per D3 e avere la fonte nel progetto è utile per capire come funzionano le cose. Rende anche molto facile aggiungere/estendere le cose se necessario.Assicurati di fare riferimento al progetto in-solution se lo fai e non la DLL compilata.
Si noti inoltre che molta della documentazione disponibile e degli esempi online sono destinati al componente Silverlight gestito e non al componente WPF aperto. Molti dei componenti sono diversi tra queste due versioni, quindi è necessario scavare attraverso il componente WPF per vedere cosa c'è. L'esempio sopra è per il componente WPF v0.3.
Non si dovrebbero creare elementi in modo programmatico e aggiungerli alla griglia in questo modo. È necessario creare un datatemplate listItem per i BLOB e quindi associare una raccolta di BLOB a un listView. – Alain
Sarebbe molto difficile ottenere uno scorrimento fluido in questo modo, no? Dovrei aggiungere tutti i dati alla raccolta (che si arresterebbero in modo anomalo) o ripopolare in modo dinamico la raccolta, che probabilmente non sembrerebbe liscia. – Sugrue