2017-08-01 154 views
2

我有以下AreaSeries圖表使用OxyPlotXamarin Forms。它有三個系列。添加MarkerStroke顏色在Smooth正確時添加粗線條

  1. 光滑= TRUE,MarkerStroke =默認情況下,如預期結果
  2. 光滑= TRUE,MarkerStroke =黃色粗線顯示了該行預期
  3. 光滑=假,MarkerStroke =黃色,結果

因此,當我使用Smooth = true併爲MarkerStroke定義顏色時,它會添加不需要的粗線。如何解決/解決它?

注意:在線系列,它按預期工作。問題只在區域系列上。

enter image description here

情節模式

public class MyOxyPlotModelData 
{ 
     public PlotModel AreaModel { get; set; } 

     public MyOxyPlotModelData() 
     { 
      AreaModel = CreateAreaChart(); 

     } 

     public PlotModel CreateAreaChart() 
     { 
      PlotModel plotModel1 = new PlotModel { Title = "Area" }; 
      var valueAxisX = new LinearAxis 
      { 
       Position = AxisPosition.Bottom, 
       AxislineColor = OxyColors.White, 
       TicklineColor = OxyColors.White, 
       TextColor = OxyColors.White, 
       FontSize = 12, 
       IsZoomEnabled = false, 
       IsPanEnabled = false 
      }; 

      var valueAxisY = new LinearAxis 
      { 
       Position = AxisPosition.Left, 
       //Maximum = 15, 
       //Minimum = 0, 
       AxislineColor = OxyColors.White, 
       TicklineColor = OxyColors.White, 
       TextColor = OxyColors.White, 
       FontSize = 12, 
       IsZoomEnabled = false, 
       IsPanEnabled = false 
      }; 

      plotModel1.Axes.Add(valueAxisX); 
      plotModel1.Axes.Add(valueAxisY); 

      plotModel1.DefaultColors = new List<OxyColor> 
      { 
       OxyColors.Purple, 
       OxyColors.DeepPink, 
       OxyColors.Teal 
       //OxyColor.FromRgb(0x20, 0x4A, 0x87) 
      }; 

      AreaSeries areaSeries1 = new AreaSeries 
      { 
       MarkerType = MarkerType.Circle, 
       MarkerSize = 2, 
       //MarkerStroke = OxyColors.White, 
       StrokeThickness = 1, 
       Smooth = true 
      }; 
      areaSeries1.Points.Add(new DataPoint(0, 50)); 
      areaSeries1.Points.Add(new DataPoint(10, 140)); 
      areaSeries1.Points.Add(new DataPoint(20, 80)); 


      AreaSeries areaSeries2 = new AreaSeries 
      { 
       MarkerType = MarkerType.Circle, 
       MarkerSize = 2, 
       MarkerStroke = OxyColors.Yellow, 
       StrokeThickness = 1, 
       Smooth = true 
      }; 
      areaSeries2.Points.Add(new DataPoint(0, 30)); 
      areaSeries2.Points.Add(new DataPoint(15, 150)); 
      areaSeries2.Points.Add(new DataPoint(20, 20)); 


      AreaSeries areaSeries3 = new AreaSeries 
      { 
       MarkerType = MarkerType.Circle, 
       MarkerSize = 2, 
       MarkerStroke = OxyColors.Yellow, 
       StrokeThickness = 1, 
       Smooth = false 
      }; 
      areaSeries3.Points.Add(new DataPoint(0, 40)); 
      areaSeries3.Points.Add(new DataPoint(15, 110)); 
      areaSeries3.Points.Add(new DataPoint(20, 55)); 

      plotModel1.Series.Add(areaSeries1); 
      plotModel1.Series.Add(areaSeries2); 
      plotModel1.Series.Add(areaSeries3); 


      return plotModel1; 

     } 
} 

應用。 XAML.cs

public App() 
    { 
     InitializeComponent(); 
     var vSampleData = new MyOxyPlotModelData(); 

     MainPage = new OxyPlotNewSeries.MainPage { BindingContext = vSampleData }; 

    } 

MainPage.xaml中你有

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:OxyPlotNewSeries" 
      xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms" 
      x:Class="OxyPlotNewSeries.MainPage"> 

    <AbsoluteLayout> 

     <oxy:PlotView Model="{Binding AreaModel}" BackgroundColor="#000000" 
        AbsoluteLayout.LayoutBounds="10,30,.9,.9" 
        AbsoluteLayout.LayoutFlags="WidthProportional,HeightProportional" /> 
    </AbsoluteLayout> 

</ContentPage> 
+1

平滑產生很多中間點。當你定義一個標記時,它會在所有這些點上繪製一個標記。粗線只是標記靠在一起。你通過不添加標記來解決它。 –

+0

就像@PalleDue指出的那樣,如果你不需要它,就不要使用它。雖然如果厚度是你的不喜歡,我沒有看到MarkerStrokeThickness屬性設置在任何地方? –

+0

@PalleDue爲什麼它在系列系列中工作正常,而不是在系列系列中?請參閱問題 – Lijo

回答

1

一種選擇是使用TwoColorAreaSeries代替,因爲你描述不會發生這一系列類型的問題。

enter image description here

TwoColorAreaSeries areaSeries2 = new TwoColorAreaSeries 
{ 
    MarkerType = MarkerType.Circle, 
    MarkerSize = 5, 
    MarkerStroke = OxyColors.Yellow, 
    MarkerStrokeThickness = 5, 
    StrokeThickness = 1, 
    Smooth = true 
}; 
areaSeries2.Points.Add(new DataPoint(0, 30)); 
areaSeries2.Points.Add(new DataPoint(15, 140)); 
areaSeries2.Points.Add(new DataPoint(20, 20)); 

編輯:它是一個錯誤嗎?這可能是......雖然通過自己的例子來看,似乎它的意思是這個樣子繪製這樣的事情:

enter image description here

這:

enter image description here

+0

那麼,它在AreaSeries中是一個錯誤嗎? – Lijo

+0

請參閱我的**編輯**。 – jsanalytics