Y正是你传递的值,你不供给定义每一个品种来绘制它

LiveCharts文书档案-3起来-3类型和装置

LiveCharts文书档案-3上马-3类型和装置

类型和安装

这一部分尤其的显要,涉及到LiveCharts的基本构成单元的牵线
LiveChart能够绘制任何项目,甚至是自定义的项目,且不丢掉强类型语言的便宜,原理很不难,当您传递一个泛型集合的时候,LiveChart会拉取X和Y值(笛卡尔Chart),你不须要定义每一个门类来绘制它。库已经通晓怎么绘制,double,int,decimal,short
,float,long还有任何特别陈设的品类,ObservableCollection,ObservablePoint,ScatterPoint,DateTimePoint,HeatPoint,OHLPoint,PolarPoint.所以的这么些连串都能够在性质改变的时候通知chart实行立异,上边包车型客车例证就采纳了这个品种,你也能够协调定义本人索要的花色。

var doubleValues = new ChartValues<double> { 1, 2 ,3 };
var intValues = new ChartValues<int> { 1, 2 ,3 };

//the observable value class is really helpful, it notifies the chart to update
//every time the ObservableValue.Value property changes
var observableValues = new ChartValues<LiveCharts.Defaults.ObservableValue> 
{ 
    new LiveCharts.Defaults.ObservableValue(1), //initializes Value property as 1
    new LiveCharts.Defaults.ObservableValue(2),
    new LiveCharts.Defaults.ObservableValue(3)
};

你能够小心到,chart总是使用X,Y坐标来绘制(笛Carl坐标系),然而二个组double,int,long值库也能够绘制是怎么二遍事?
很简短,X是那组数组当中的index,Y就是你传递的值。当然,那只是您使用横向系列的时候是那样,假设你利用纵向连串,那么X正是传递的值,Y正是Index。

var myValues = new LiveCharts.ChartValues<double>
{
  10, //index 0
  6,  //index 1
  9,  //index 2
  2,  //index 3
  7   //index 4
}

实际上的坐标是:
万博manbetx客户端 1

曾经定义了拉取坐标的配备:
横向坐标:

new CartesianMapper<double>()
  .X((value, index) => index) //use the index as X
  .Y((value, index) => value) //use the value as Y

纵向坐标:

new CartesianMapper<double>()
  .X((value, index) => value) //use the value as X
  .Y((value, index) => index) //use the index as Y

X和Y只是对于笛CarlChart有须要,可是当你想要绘制二个雷达图(半径和角度)可能金融Chart的时候,该怎么布局?所以本人创制了2个Mappers类型,那些种类会回来一个毋庸置疑mapper的实例,有为数不少选用,Xy,Financial,Bubble和Polar,上边包车型大巴mappers将会被取而代之为:

Mappers.Xy<double>()
  .X((value, index) => index) //use the index as X
  .Y((value, index) => value) //use the value as Y

下边是多重mappers,那几个是依照你的图景来设定的。

//X and Y
var mapper = Mappers.Xy<ObservablePoint>() //in this case value is of type <ObservablePoint>
    .X(value => value.X) //use the X property as X
    .Y(value => value.Y); //use the Y property as Y

//X, Y and Weight
var mapper = Mappers.Bubble<BubblePoint>()
                .X(value => value.X)
                .Y(value => value.Y)
                .Weight(value => value.Weight);

//Angle and Radius
var mapper = Mappers.Polar<PolarPoint>()
    .Radius(value => value.Radius) //use the radius property as radius for the plotting
    .Angle(value => value.Angle); //use the angle property as angle for the plotting

//Open, High, Low and Close
var mapper = Mappers.Financial<OhlcPoint>()
                .X((value, index) => index)
                .Open(value => value.Open)
                .High(value => value.High)
                .Low(value => value.Low)
                .Close(value => value.Close);

您能够通过两种主意设定mappers:
1.Global级别
那种办法在你的应用程序级别保存设置,每便LiveCharts检查Chart
Values实例中的类型的时候,它都会动用那些mapper,除非SeriesCollection
mapper和Series mapper是null。

var mapper1 = Mappers.Xy<int>()
  .X((value, index) => index) 
  .Y(value => value);
LiveCharts.Charting.For<int>(mapper1, SeriesOrientation.Horizontal); //when horizontal

var mapper2 = Mappers.Xy<int>()
  .X(value => value) //use the value (int) as X
  .Y((value, index) => index);
LiveCharts.Charting.For<int>(mapper2, SeriesOrientation.Vertical); //when vertical

其余多少个例子正是自定义类型,ObseravableCollection类只含有五个性子,X和Y,请留心本次自个儿给横向和纵向使用了同样的安装,并没有传递第三个参数。

For<ObservablePoint>(Mappers.Xy<ObservablePoint>()
  .X((value, index) => value.X) 
  .Y(value => value.Y));`

若果那些还不是很精晓,能够去源码里找到越来越多细节。
2.Series Collection级别
但当你定义一个塞里es
Collection的时候,你也能够传递二个暗许的布局,这几个布局将会覆盖掉全局配置,除非Series级其余安插是null。

var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var seriesCollection = new SeriesCollection(mapper);
myChart.SeriesCollection = seriesCollection;

3.特定的Series级别
最终,假设只是为了设定一个Series,你能够定义二个特定的mapper用于它,那一个配置会覆盖掉Global和Series
Collection级其余配置。

var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var pieSeries = new PieSeries(mapper);

种类和安装

这一片段特别的要紧,涉及到LiveCharts的基本组成单元的介绍
LiveChart能够绘制任何项目,甚至是自定义的项目,且不丢掉强类型语言的功利,原理很不难,当您传递贰个泛型集合的时候,LiveChart会拉取X和Y值(笛CarlChart),你不须要定义各种体系来绘制它。库已经清楚怎么绘制,double,int,decimal,short
,float,long还有任何特别企划的品类,ObservableCollection,ObservablePoint,ScatterPoint,Date提姆ePoint,HeatPoint,OHLPoint,PolarPoint.所以的那几个种类都得以在质量改变的时候文告chart实行革新,下边包车型大巴例证就利用了这个连串,你也能够自个儿定义本身供给的花色。

var doubleValues = new ChartValues<double> { 1, 2 ,3 };
var intValues = new ChartValues<int> { 1, 2 ,3 };

//the observable value class is really helpful, it notifies the chart to update
//every time the ObservableValue.Value property changes
var observableValues = new ChartValues<LiveCharts.Defaults.ObservableValue> 
{ 
    new LiveCharts.Defaults.ObservableValue(1), //initializes Value property as 1
    new LiveCharts.Defaults.ObservableValue(2),
    new LiveCharts.Defaults.ObservableValue(3)
};

你能够小心到,chart总是使用X,Y坐标来绘制(笛Carl坐标系),不过2个组double,int,long值库也能够绘制是怎么1次事?
相当的粗略,X是那组数组其中的index,Y正是你传递的值。当然,这只是你利用横向系列的时候是那般,要是你选取纵向系列,那么X就是传递的值,Y正是Index。

var myValues = new LiveCharts.ChartValues<double>
{
  10, //index 0
  6,  //index 1
  9,  //index 2
  2,  //index 3
  7   //index 4
}

事实上的坐标是:
万博manbetx客户端 2

业已定义了拉取坐标的安插:
横向坐标:

new CartesianMapper<double>()
  .X((value, index) => index) //use the index as X
  .Y((value, index) => value) //use the value as Y

纵向坐标:

new CartesianMapper<double>()
  .X((value, index) => value) //use the value as X
  .Y((value, index) => index) //use the index as Y

X和Y只是对于笛CarlChart有必要,不过当您想要绘制二个雷达图(半径和角度)只怕经济Chart的时候,该怎么安插?所以作者创设了二个Mappers类型,那一个项目会回去一个科学mapper的实例,有过多选项,Xy,Financial,Bubble和Polar,下边包车型客车mappers将会被替代为:

Mappers.Xy<double>()
  .X((value, index) => index) //use the index as X
  .Y((value, index) => value) //use the value as Y

上边是多重mappers,那个是依照你的情形来设定的。

//X and Y
var mapper = Mappers.Xy<ObservablePoint>() //in this case value is of type <ObservablePoint>
    .X(value => value.X) //use the X property as X
    .Y(value => value.Y); //use the Y property as Y

//X, Y and Weight
var mapper = Mappers.Bubble<BubblePoint>()
                .X(value => value.X)
                .Y(value => value.Y)
                .Weight(value => value.Weight);

//Angle and Radius
var mapper = Mappers.Polar<PolarPoint>()
    .Radius(value => value.Radius) //use the radius property as radius for the plotting
    .Angle(value => value.Angle); //use the angle property as angle for the plotting

//Open, High, Low and Close
var mapper = Mappers.Financial<OhlcPoint>()
                .X((value, index) => index)
                .Open(value => value.Open)
                .High(value => value.High)
                .Low(value => value.Low)
                .Close(value => value.Close);

你能够经过八种办法设定mappers:
1.Global级别
这种措施在您的应用程序级别保存设置,每趟LiveCharts检查Chart
Values实例中的类型的时候,它都会选取那几个mapper,除非SeriesCollection
mapper和Series mapper是null。

var mapper1 = Mappers.Xy<int>()
  .X((value, index) => index) 
  .Y(value => value);
LiveCharts.Charting.For<int>(mapper1, SeriesOrientation.Horizontal); //when horizontal

var mapper2 = Mappers.Xy<int>()
  .X(value => value) //use the value (int) as X
  .Y((value, index) => index);
LiveCharts.Charting.For<int>(mapper2, SeriesOrientation.Vertical); //when vertical

除此以外四个例证便是自定义类型,ObseravableCollection类只包括八个天性,X和Y,请小心这一次笔者给横向和纵向使用了同一的设置,并没有传递第四个参数。

For<ObservablePoint>(Mappers.Xy<ObservablePoint>()
  .X((value, index) => value.X) 
  .Y(value => value.Y));`

一经这些还不是很驾驭,能够去源码里找到愈多细节。
2.Series Collection级别
但当您定义1个Series
Collection的时候,你也能够传递3个默许的布局,这一个布局将会覆盖掉全局配置,除非Series级其余布署是null。

var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var seriesCollection = new SeriesCollection(mapper);
myChart.SeriesCollection = seriesCollection;

3.特定的Series级别
说到底,假使只是为着设定三个Series,你能够定义多个一定的mapper用于它,那些配置会覆盖掉Global和塞里es
Collection级其他安排。

var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var pieSeries = new PieSeries(mapper);

文告Chart自动更新

您能够兑现IObservableChartPoint接口,从而完毕当自定义类型的品质改变的时候,Chart会自动举行立异。下3个事例你将相会到
ObservableValue类型的定义,看看它是怎么在Value改变的时候文告Chart改变的。这几个很好驾驭,你只供给每一遍在设定Value属性的值的时候,触发贰个PointChanged事件就能够了。

public class ObservableValue : IObservableChartPoint
{
    private double _value;
    public ObservableValue()
    {

    }

    public ObservableValue(double value)
    {
        Value = value;
    }

   public event Action PointChanged;
   public double Value
   {
       get { return _value; }
       set
       {
           _value = value;
           OnPointChanged();
       }
   }

   protected void OnPointChanged()
   {
       if (PointChanged != null) PointChanged.Invoke();
   }
}

本节内容完

通报Chart自动更新

你可以实现IObservableChartPoint接口,从而完成当自定义类型的性质改变的时候,Chart会自动实行翻新。下多个例子你将会看到
ObservableValue类型的概念,看看它是怎么在Value改变的时候通告Chart改变的。这一个很好精通,你只必要每一回在设定Value属性的值的时候,触发三个PointChanged事件就足以了。

public class ObservableValue : IObservableChartPoint
{
    private double _value;
    public ObservableValue()
    {

    }

    public ObservableValue(double value)
    {
        Value = value;
    }

   public event Action PointChanged;
   public double Value
   {
       get { return _value; }
       set
       {
           _value = value;
           OnPointChanged();
       }
   }

   protected void OnPointChanged()
   {
       if (PointChanged != null) PointChanged.Invoke();
   }
}

万博manbetx客户端,本节内容完