原文: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坐标来绘制(笛卡尔坐标系),但是一个组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
}

实际的坐标是:

已经定义了拉取坐标的配置:

横向坐标:

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只是对于笛卡尔Chart有必要,但是当你想要绘制一个雷达图(半径和角度)或者金融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级别

但当你定义一个Series 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);

通知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();
}
}

本节内容完

LiveCharts文档-3开始-3类型和设置的更多相关文章

  1. LiveCharts文档-4基本绘图-3其他

    原文:LiveCharts文档-4基本绘图-3其他 4基本绘图-3其他 因为每个图表的使用方法大同小异,所以不再啰嗦重复,具体直接看这个链接里的介绍.原文链接 其他的图表类型有 基本堆叠图 基本条形图 ...

  2. LiveCharts文档-3开始-7标签

    原文:LiveCharts文档-3开始-7标签 LiveCharts文档-3开始-7标签 Label就是Chart中表示数值的字符串,通常被放置在轴的位置和提示当中. 下图中的这些字符串显示的都是标签 ...

  3. LiveCharts文档-3开始-4可用的图表

    原文:LiveCharts文档-3开始-4可用的图表 LiveCharts文档-3开始-4可用的图表 LiveCharts共有5类图表,你将会在后面的章节当中看到这些图表的使用方法. Cartesia ...

  4. LiveCharts文档-3开始-2基础

    原文:LiveCharts文档-3开始-2基础 LiveCharts文档-3开始-2基础 基本使用 LiveCharts设计的很容易使用,所有的东西都可以自动的实现更新和动画,库会在它觉得有必要更新的 ...

  5. LiveCharts文档-2FAQ

    原文:LiveCharts文档-2FAQ LiveCharts文档-2FAQ 原文链接 LiveCharts基于的平台有WPF,UWP,WinForms:语言是C#, FAQ: 我怎么转换一个char ...

  6. LiveCharts文档-3开始-8自定义工具提示

    原文:LiveCharts文档-3开始-8自定义工具提示 LiveCharts文档-3开始-8自定义工具提示 默认每个需要tooltip或者legend的chart都会初始化一个DefaultLeng ...

  7. LiveCharts文档-4基本绘图-1基本线条图

    原文:LiveCharts文档-4基本绘图-1基本线条图 4基本绘图-1基本线条图 using System; using System.Windows.Forms; using System.Win ...

  8. LiveCharts文档-4基本绘图-2基本柱形图

    原文:LiveCharts文档-4基本绘图-2基本柱形图 4基本绘图-2基本柱形图 using System.Windows.Forms; using LiveCharts; using LiveCh ...

  9. LiveCharts文档-3开始-6轴Axes

    原文:LiveCharts文档-3开始-6轴Axes LiveCharts文档-3开始-6轴Axes 通常来说,你可以自定义LiveChart里的任何东西,Axes也不例外.下面这幅图展示了Axes. ...

随机推荐

  1. Linux LB--负载均衡和高可靠

    1.负载均衡典型应用场景,外网.内网.私网公共服务. 典型场景: (1)用户通过公网访问数据中心的ftp.web.https服务器. (2) 在数据中心内部东西向访问其他服务时,例如,访问其他虚拟机. ...

  2. 记录C/C++中遇到的一些小问题

    1. printf 比如 char a = \x90; printf("%02x", a); 想输出为90,没想到却是ffffff90,这个问题害我一个程序老是出错 最终发现只要改 ...

  3. http2

    原文转至:https://zhuanlan.zhihu.com/p/26559480 HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议.由 ...

  4. tkinter中frame布局控件

    frame控件 frame控件是将窗口分成好几个小模块,然后每个小模块中添加控件. 也就是将窗口合理的布局 由于和其他控件的操作基本一致,就不做注释了 import tkinter wuya = tk ...

  5. windows服务器设置文件属性设置去掉隐藏已知文件类型的扩展名(即文件后缀名可见)

    摘要: 1.文件后缀名不可见,系统运维过程容易发生同名不同后缀的文件操作混淆的情况 2.windows系统默认是文件后缀名不可见 3.所以需要更改一下配置. 4.操作步骤如下图: (1)点击组织-文件 ...

  6. SVN服务端VisualSVN数据转移说明

    两台服务器,进行SVN的迁移: 系统平台:windows server 2008 and windows server 2012 版本库:meishu 源服务器:192.168.0.245 目标服务器 ...

  7. C#中的console类输入输出功能

    Console.WriteLine() 直接将括号内内容显示在控制台界面中(相当于C语言printf()吧) Console.ReadLine()获取控制台用户自己输入的内容(功能和C语言scanf( ...

  8. validator js验证器

    转自:https://github.com/jaywcjlove/validator.js 轻量级的JavaScript表单验证,字符串验证.没有依赖,支持UMD 导入js库 <script t ...

  9. P进制转Q进制

    // 对一个P进制的数,如果要转换成Q进制的数 // 1)将P进制数x转换成十进制数y int y=0,product=1;//product在循环中会不断成P,得到1.P^2..... while( ...

  10. 3星|《AI极简经济学》:AI的预测、决策、战略等方面的应用案例介绍

    AI极简经济学 主要内容是AI的各种应用案例介绍.作者把这些案例分到五个部分介绍:预测.决策.工具.战略.社会. 看书名和介绍以为会从经济学的角度解读AI,有更多的新鲜的视角和观点,读后比较失望,基本 ...