2016-08-11 1 views
1

Я использую в Oxyplot для моего Xamarin.iOS проекта построения гистограммы ..OxyPlot: Как использовать формулу для обозначения оси и показывать ярлыки Y?

Это то, что мой график в настоящее время выглядит любит в настоящее время

enter image description here

здесь вместо значений по оси х, числа, я хочу показать солнце, mon true, wed .....

Я вижу, что у CategoryAxis есть метод под названием LabelFormatter, который возвращает Func<double, string>, но как его использовать?

А также почему метки Y-Axis не отображаются?

public class MyClass 
    { 
     /// <summary> 
     /// Gets or sets the plot model that is shown in the demo apps. 
     /// </summary> 
     /// <value>My model.</value> 
     public PlotModel MyModel { get; set; } 

     /// <summary> 
     /// Initializes a new instance of the <see cref="OxyPlotSample.MyClass"/> class. 
     /// </summary> 
     public MyClass() 
     { 

      var model = new PlotModel { Title = "ColumnSeries" }; 
      model.PlotAreaBorderColor = OxyColors.Transparent; 
      // A ColumnSeries requires a CategoryAxis on the x-axis. 

      model.Axes.Add(new CategoryAxis() 
      { 
       Position = AxisPosition.Bottom, 
       MinorTickSize = 0, 
       MajorTickSize = 0, 
       //MajorGridlineStyle = LineStyle.Solid, 
       //MinorGridlineStyle = LineStyle.Solid, 
      }); 

      model.Axes.Add(new LinearAxis() 
      { 
       AxislineStyle = LineStyle.None, 
       Position = AxisPosition.Left, 
       MinorTickSize = 0, 
       MajorTickSize = 0, 
       MajorGridlineStyle = LineStyle.Solid, 
       MinorGridlineStyle = LineStyle.Solid, 
       Minimum = 0, 
       Maximum = 400, 
      }); 

      var series = new ColumnSeries(); 
      series.Items.Add(new ColumnItem() { Value = 200, Color = OxyColors.Orange}); 
      series.Items.Add(new ColumnItem(200)); 
      series.Items.Add(new ColumnItem(300)); 
      series.Items.Add(new ColumnItem(100)); 
      series.Items.Add(new ColumnItem(200)); 
      series.Items.Add(new ColumnItem(100)); 
      series.Items.Add(new ColumnItem(130)); 

      model.Series.Add(series); 

      this.MyModel = model; 
     } 
    } 

ответ

3

Чтобы показать этикетку на оси, вы должны указать свойство MajorStep, Oxyplot покрасят только метки, соответствующие крупный шаг.

model.Axes.Add(new LinearAxis() 
{ 
    MajorStep = 10, 
    Position = AxisPosition.Left, 
    ... 
}); 

и изменить этикетки с названием дня, вы можете использовать DateTimeAxis вместо LinearAxis:

model.Axes.Add(new DateTimeAxis() 
{ 
    StringFormat = "ddd", 
    Position = AxisPosition.Bottom, 
    ... 
}); 

Если вы хотите что-то более настроены вы должны использовать атрибут LabelFormatter.

EDIT:

Этикетки в CategoryAxis:

var categoryAxis = new CategoryAxis() 
{ 
    Position = AxisPosition.Bottom, 
    ... 
}; 

categoryAxis.ActualLabels.Add("Mon"); 
categoryAxis.ActualLabels.Add("Tue"); 
categoryAxis.ActualLabels.Add("Wed"); 
categoryAxis.ActualLabels.Add("Thu"); 
categoryAxis.ActualLabels.Add("Fri"); 
categoryAxis.ActualLabels.Add("Sat"); 
categoryAxis.ActualLabels.Add("Sun"); 

Model.Axes.Add(categoryAxis); 

CategoryAxis.ActualLabels предназначен только для чтения, так что вы должны будете добавить элементы один за другим.

+0

Но, чтобы построить серию столбцов, не нужно ли добавлять CategoryAxis() в качестве оси X? – HeisenBerg

+0

Я отредактировал ответ, я думаю, это то, чего вы хотите достичь. – Jose

+0

спасибо. это работает. И я думаю, что вы о второй части моего quesiton. Чтобы показать уровни y. -_- – HeisenBerg

Смежные вопросы