2017-07-12 7 views
2

J'ai une série de cartes fastline où le XI ont DateTime et sur Y double valeurs - série est ajoutée au tableau avec une telle méthode:incorrect des points de données vides sont affichés dans un graphique fastline

public virtual bool AddOrUpdateSeries(int caIndex, Series newSeries, bool visibleInLegend) 
{ 
    var chartArea = GetChartArea(caIndex); 

    if (chartArea == null) return false; 

    var existingSeries = _chart.Series.FirstOrDefault(s => s.Name == newSeries.Name); 

    if (existingSeries != null) 
    { 
     existingSeries.Points.Clear(); 
     AddPoints(newSeries.Points, existingSeries); 
    } 
    else 
    { 
     newSeries.ChartArea = chartArea.Name; 
     newSeries.Legend = chartArea.Name; 
     newSeries.IsVisibleInLegend = visibleInLegend; 
     newSeries.BorderWidth = 2; 
     newSeries.EmptyPointStyle = new DataPointCustomProperties { Color = Color.Red }; 

     _chart.Series.Add(newSeries); 
    } 

    return true; 
} 

Comme vous pouvez voyez, je suis en train de définir le style pour que le point vide soit affiché en rouge.

Les premiers points qui sont ajoutés à la série sont les suivantes:

enter image description here

Comme vous pouvez le voir, deux premiers points ont la même valeur Y, mais en plus - premier a IsEmpty jeu de drapeau.

point de vide est ajouté à la série avec un tel morceau de code:

series.Points.Add(new DataPoint 
{ 
    XValue = _beginOADate, 
    YValues = new[] { firstDbPoint.Y }, 
    IsEmpty = true 
}); 

_beginOADate est le double de la valeur de OADate = 42563 = 12/07/2016 00:00 as DateTime.

Le deuxième DateTime son point est 15/08/2016 22:20

Lorsque graphique est affiché avec le début de l'axe X, tout est ok comme sur l'image ci-dessous - vide commence à point de données 07/12/2016 et dure jusqu'à 15/08/2016. enter image description here

Mais, quand je défiler une position sur X, la vide ligne rouge de point de données n'est pas affiché - à la place, toute la partie visible de la ligne de vide du point de données est affiché comme il est non vide:

enter image description here

Quelqu'un sait comment résoudre ce problème afin que toute la ligne à partir du point de données vide jusqu'au premier point de données non vide soit toujours affichée en rouge?

Bien entendu, la solution fictive consisterait à ajouter un point de données vide supplémentaire très proche du premier point non vide, mais je n'aime pas cette solution.

+0

Fastline ne prend pas en charge toutes les fonctions; le problème persiste-t-il lors du passage en ligne? – TaW

+0

Eh bien, quand je l'ai changé à 'Line' tout fonctionne comme prévu - Merci TaW, mais le rendu du graphique est beaucoup plus lent. J'ai des graphiques avec 30k points, donc quand il est zoomé, il ralentit beaucoup trop. Quelqu'un sait comment le rendre plus lisse? – pitersmx

+1

@TaW Pouvez-vous poster votre commentaire comme réponse? En fait, cela résout le problème. Cela pourrait être utile aux autres. – pitersmx

Répondre

1

Le ChartType.FastLine est beaucoup plus rapide du simple tableau Line mais pour être si vite il fait plusieurs simplifications dans le rendu, ce qui signifie que tous les éléments cartographiques sont pris en charge:

Le type de graphique FastLine est une variante de Le graphique linéaire réduit considérablement le temps de dessin d'une série qui contient un très grand nombre de points de données . Utilisez ce tableau dans les situations où de très grands ensembles de données sont utilisés et la vitesse de rendu est critique.

Certaines fonctions de graphique sont omises dans le graphique FastLine pour améliorer les performances . Les fonctionnalités omises comprennent le contrôle des attributs visuels, des marqueurs, des étiquettes de points de données et des ombres au niveau du point.

Malheureusement EmptyPointStyle est un «attribut visuel de niveau à .

Donc, vous aurez besoin de décider ce qui est plus important: La vitesse brute ou le traitement direct et plausible de vide DataPoints.

(j'ai le pressentiment que vous allez pour votre « solution factice », qui est imo une 1ère solution de classe ;-)