winform LiveCharts2的使用--图表的使用

news2025/6/2 17:59:56

介绍

对于图标,需要使用到livechart2中的CartesianChart 控件是一个“即用型”控件,用于使用笛卡尔坐标系创建绘图。需要将Series属性分配一组ICartesianSeries。

例如下面代码,创建一个最简单的图表:

cartesianChart1.Series = new ISeries[]
{
    new LineSeries<int>
    {
        Values = new int[] { 4, 6, 5, 3, -3, -1, 2 }
    },
    new ColumnSeries<double>
    {
        Values = new double[] { 2, 5, 4, -2, 4, -3, 5 }
    }
};

代码中new LineSeries<int>表示图上的曲线图,new ColumnSeries<double>表示图上的柱状图。通过对Values赋值,来构建每一个点。也有StepLineSeries,表示步线图:

一个图标由四部分组成,分别是Series(图形)、Axes(坐标轴)、Tooltip(提示信息)、Legend(图例),分别对应图上内容:

 

Series介绍

LineSeries

private LineSeries<ObservableValue> m_lineSeries { get; set; }
public ISeries[] Series { get; set; }


private void cartesianChart1_Load(object sender, EventArgs e)
{
    m_lineSeries = new LineSeries<ObservableValue>()
    {
        Name = "直通率(%)",
        Values = new ObservableCollection<ObservableValue>(),
        DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top,  // 数值显示位置
        DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45)),  // 设置显示在图形中的数值颜色
        LineSmoothness = 1,  // 设置曲线的平滑性, 0--1,由直到弯曲
        Fill = new SolidColorPaint(new SKColor(20, 200, 200, 128)),  // 设置图形填充,折线的下部分进行填充
    };

    List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };
    m_lineSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();

    Series = [m_lineSeries];
    cartesianChart1.Series = Series;
}

List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };

m_lineSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();

此处用于设置在图中描绘的点,表示的是Y轴对应的值

Series = [m_lineSeries];

cartesianChart1.Series = Series;

将series在图上绘制

属性:

Name

图例名称

Values

图形对应的点值

DataLabelsPosition

数值在图形中显示的位置

默认Top;

DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top

DataLabelsPaint

数值显示的颜色

DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45))

DataLabelsFormatter

数值在图像上格式化显示

DataLabelsFormatter = value => (value.Coordinate.PrimaryValue / 100).ToString("P"),

以百分比形式显示

LineSmoothness

设置曲线的平滑性

0--1,由直到弯曲

Fill

设置图形填充,图形下部分进行填充颜色

Fill = new SolidColorPaint(new SKColor(20, 200, 200, 128))

null不填充

ScalesYAt

数值对应哪一个Y轴显示(如果有多个Y轴)

Stroke

显示图形的边框属性

IsHoverable

鼠标悬停在图形点时,是否显示详细信息

默认true

DataLabelsFormatter:

  • "N":数字格式(带千位分隔符)。
    • 示例:1234.567.ToString("N2")"1,234.57"
  • "F":定点数格式。
    • 示例:1234.567.ToString("F2")"1234.57"
  • "C":货币格式。
    • 示例:1234.567.ToString("C2")"$1,234.57"(取决于区域设置)
  • "P":百分比格式。
    • 示例:0.567.ToString("P2")"56.70%"
  • "E":科学计数法格式。
    • 示例:1234.567.ToString("E2")"1.23E+003"
  • "d":短日期格式。
    • 示例:DateTime.Now.ToString("d")"10/15/2023"
  • "D":长日期格式。
    • 示例:DateTime.Now.ToString("D")"Sunday, October 15, 2023"
  • "t":短时间格式。
    • 示例:DateTime.Now.ToString("t")"10:30 AM"
  • "T":长时间格式。
    • 示例:DateTime.Now.ToString("T")"10:30:45 AM"
  • "yyyy-MM-dd":自定义日期格式。
    • 示例:DateTime.Now.ToString("yyyy-MM-dd")"2023-10-15"
  • "0.00":强制显示两位小数。
    • 示例:1234.5.ToString("0.00")"1234.50"
  • "#,###":添加千位分隔符。
    • 示例:1234567.ToString("#,###")"1,234,567"
  • "0.##%":自定义百分比格式。
    • 示例:0.567.ToString("0.##%")"56.7%"

Stroke = new SolidColorPaint(new SKColor(0, 0, 0)){StrokeThickness = 2 }

new SKColor(0, 0, 0)设置边框的颜色

StrokeThickness设置绘制边框的粗细值

ColumnSeries

ColumnSeries 用于绘制柱状图,适合展示离散数据的对比。每个柱子代表一个数据点,柱子的高度由数据点的值决定。可以同时显示多个 ColumnSeries,用于比较不同类别的数据。

private ColumnSeries<ObservableValue> m_onepass_columnSeries { get; set; }
private void cartesianChart1_Load(object sender, EventArgs e)
{
    m_onepass_columnSeries = new ColumnSeries<ObservableValue>()
    {
        Name = "一次PASS",
        Values = new ObservableCollection<ObservableValue>(),
        ScalesYAt = 0,
        DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top,  // 数值显示位置
        DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45)),  // 设置显示在图形中的数值颜色
        IgnoresBarPosition = true,
        MaxBarWidth = 20,
        Stroke = null,
        
    };

    List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };
    m_onepass_columnSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();

    Series = [m_onepass_columnSeries];
    cartesianChart1.Series = Series;
}

属性(有相同属性,不进行介绍):

Rx 和 Ry

设置柱子的圆角半径

Rx = 5;Ry = 5;

MaxBarWidth

设置柱子的最大宽度

MaxBarWidth = 20

IgnoresBarPosition

忽略位置显示,当有多个柱状图时,可以重叠显示

默认false

StepLineSeries

阶梯线图 通过水平线和垂直线连接数据点,形成阶梯状的折线。每个数据点的值决定了阶梯的高度。适合展示离散数据的变化,尤其是数据点之间的变化是突变的场景。

private StepLineSeries<ObservableValue> m_time_stepline { get; set; }
private void cartesianChart1_Load(object sender, EventArgs e)
{
    m_time_stepline = new StepLineSeries<ObservableValue>()
    {
        Name = "time",
        Values = new ObservableCollection<ObservableValue>(),
        ScalesYAt = 0,
    };

    List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };
    m_time_stepline.Values = ints.Select(value=>new ObservableValue(value)).ToList();

    Series = [m_time_stepline];
    cartesianChart1.Series = Series;
}

属性(有相同属性,不进行介绍):

GeometryFill

数据点的填充颜色

GeometryFill = new SolidColorPaint(SKColors.Red);

GeometryStroke

数据点的描边颜色

GeometryStroke = new SolidColorPaint(SKColors.Black);

GeometrySize

数据点的大小

GeometrySize = 10;

Axes介绍

Axes(坐标轴)用于定义数据的显示范围和刻度。可以配置为 X 轴、Y 轴,甚至是多轴(例如多个 Y 轴)。每个轴可以独立配置其外观、刻度、标签等属性。

// 定义X轴
cartesianChart1.XAxes = [
        new Axis{
        TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)),  // 刻度线颜色
        TicksAtCenter = true,  // 是否位于中间
        MinStep = 1,
        SeparatorsPaint = new SolidColorPaint(new SKColor(200, 200, 200)),
        CrosshairLabelsBackground = SKColors.DarkOrange.AsLvcColor(),
        CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkRed),
        CrosshairPaint = new SolidColorPaint(SKColors.DarkOrange, 1),
        Labeler = value => value.ToString("N3")
    }];
// 定义Y轴 这里定义了两个
cartesianChart1.YAxes = [
    new Axis{
        TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)),  // 刻度线颜色
        TicksAtCenter = true,  // 是否位于中间
        Position = LiveChartsCore.Measure.AxisPosition.Start,
        MinLimit = 0,
        },
        new Axis{
        Position = LiveChartsCore.Measure.AxisPosition.End,
        Labeler = (value) => (value/100).ToString("P"),
        MinLimit = 0,  // 最小范围
    }
];

XAxes 用于定义X轴属性

YAxes 用于定义Y轴属性

属性:

MinLimit MaxLimit

坐标轴的最小值和最大值。

MinStep

刻度的最小步长

TicksPaint

刻度线的颜色

TicksPaint = new SolidColorPaint(SKColors.Black)

TicksAtCenter

刻度线是否位于坐标轴的中心

默认true

SeparatorsPaint

分隔线的颜色

SeparatorsPaint = new SolidColorPaint(SKColors.Gray)

ShowSeparatorLines

是否显示分隔线

默认true

LabelsPaint

刻度标签的文字颜色

LabelsPaint = new SolidColorPaint(SKColors.Black)

LabelsRotation

刻度标签的旋转角度

LabelsRotation = 45 旋转45°

Labeler

自定义刻度标签的显示内容

Labeler = value => value.ToString("N2");

N2:显示两位小数

CrosshairLabelsBackground

十字准线标签的背景颜色

CrosshairLabelsBackground = SKColors.DarkOrange.AsLvcColor()

CrosshairLabelsPaint

十字准线标签的文字颜色

CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkRed)

CrosshairPaint

十字准线的颜色和宽度

CrosshairPaint = new SolidColorPaint(SKColors.DarkOrange, 1)

NamePaint

坐标轴标题的文字颜色

Position

坐标轴的位置

Position = LiveChartsCore.Measure.AxisPosition.Start

start:左侧或下侧

end:右侧或上侧

cartesianChart

可以设置的属性:

ZoomMode

设置沿哪个轴可以拖动

LegendPosition

Legend显示的位置

LegendTextSize

Legend文本的大小

Title

图表的标题

cartesianChart1.Title = new LabelVisual
{
    Text = "chart",
    TextSize = 20,
    BackgroundColor = new LvcColor(20, 200, 200)
};
cartesianChart1.ZoomMode = LiveChartsCore.Measure.ZoomAndPanMode.X;  // 可以沿X轴拖动
cartesianChart1.LegendPosition = LiveChartsCore.Measure.LegendPosition.Bottom;  // 显示位置
cartesianChart1.LegendTextSize = 18;  // 文本大小
cartesianChart1.Dock = DockStyle.Fill;  // 布局

中文乱码

如果在使用的过程中出现中文乱码,可以试试在Main中加入这行代码:

LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('汉')));

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2394052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】IPv6和NAT网络地址转换

IPv6 IPv6协议使用由单/双冒号分隔一组数字和字母&#xff0c;例如2001:0db8:85a3:0000:0000:8a2e:0370:7334&#xff0c;分成8段。IPv6 使用 128 位互联网地址&#xff0c;有 2 128 2^{128} 2128个IP地址无状态地址自动配置&#xff0c;主机可以通过接口标识和网络前缀生成全…

flutter简单自定义跟随手指滑动的横向指示器

ScrollController _scrollController ScrollController();double _scrollIndicatorWidth 60.w;//指示器的长度double _maxScrollPaddingValue 30.w;//指示器中蓝条可移动的最大距离double _scrollPaddingValue 0.0;//指示器中蓝条左边距(蓝条移动距离)overridevoid initSta…

有机黑鸡蛋与普通鸡蛋:差异剖析与选购指南

在我们的日常饮食结构里&#xff0c;鸡蛋始终占据着不可或缺的位置&#xff0c;是人们获取营养的重要来源。如今&#xff0c;市场上鸡蛋种类丰富&#xff0c;除了常见的普通鸡蛋&#xff0c;有机黑鸡蛋也逐渐崭露头角&#xff0c;其价格通常略高于普通鸡蛋。这两者究竟存在哪些…

CTFHub-RCE 命令注入-无过滤

观察源代码 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 发现除了index.php文件外&#xff0c;还存在一个可疑的文件 打开flag文件 我们尝试打开这个文件 127.0.0.1|cat 19492844826916.php 可是发现 文本内容显示不出来&…

leetcode hot100刷题日记——31.二叉树的直径

二叉树直径详解 题目描述对直径的理解解答&#xff1a;dfs小TIPS 题目描述 对直径的理解 实际上&#xff0c;二叉树的任意一条路径均可以被看作由某个节点为起点&#xff0c;从其左儿子和右儿子向下遍历的路径拼接得到。 那我们找二叉树的直径&#xff08;最大路径&#xff09…

行为型:解释器模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的&#xff1a;针对某种语言并基于其语法特征创建一系列的表达式类&#xff08;包括终极表达式与非终极表达式&#xff09;​&#xff0c;利用树结构模式…

linux 1.0.3

挂载 这个虚拟机啥时候都能挂起 会有一个这个东东 选择连接虚拟机&#xff0c;然后就连到linux了 这有两个键&#xff0c;一个是和主机连接一个是和虚拟机连接 先把U盘拔掉 原本是没有这个盘的&#xff0c;但是插上去之后&#xff0c;电脑创建了一个虚拟的盘 也就是图中的F…

C#集合循环删除某些行

你想要在遍历集合&#xff08;例如List&#xff09;的同时删除某些元素时&#xff0c;直接在循环中删除元素可能会导致问题&#xff0c;因为这可能会改变集合的大小和导致索引问题&#xff1b; 可以用for循环的倒序来删除&#xff1b; 如果要删除满足特定条件的所有元素&…

【Linux 学习计划】-- 进程地址空间

目录 进程地址的引入 进程地址空间基础原理 区域划分的本质 如何理解进程地址空间 越界访问的本质 进一步理解写时拷贝 重谈 fork 返回值 结语 进程地址的引入 我们先来看一段代码&#xff1a; 首先我们可以看到&#xff0c;父进程和子进程是可以同时可以看到一个变量…

CTFHub-RCE 命令注入-过滤空格

观察源代码 代码里面可以发现过滤了空格 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 我们尝试将空格转义打开这个文件 利用 ${IFS} 127.0.0.1|cat${IFS}flag_195671031713417.php 可是发现 文本内容显示不出来&…

Express教程【002】:Express监听GET和POST请求

文章目录 2、监听post和get请求2.1 监听GET请求2.2 监听POST请求 2、监听post和get请求 创建02-app.js文件。 2.1 监听GET请求 1️⃣通过app.get()方法&#xff0c;可以监听客户端的GET请求&#xff0c;具体的语法格式如下&#xff1a; // 1、导入express const express req…

【PostgreSQL 03】PostGIS空间数据深度实战:从地图服务到智慧城市

PostGIS空间数据深度实战&#xff1a;从地图服务到智慧城市 关键词 PostGIS, 空间数据库, 地理信息系统, GIS, 空间查询, 地理分析, 位置服务, 智慧城市, 空间索引, 坐标系统 摘要 PostGIS是PostgreSQL的空间数据扩展&#xff0c;它将普通的关系数据库转变为强大的地理信息系统…

HIT-csapp大作业:程序人生-HELLO‘s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学  号 2023111813 班 级 23L0518 学 生 鲁永哲 指 导 教 师 史先俊 计…

深入探讨redis:主从复制

前言 如果某个服务器程序&#xff0c;只部署在一个物理服务器上就可能会面临一下问题(单点问题) 可用性问题&#xff0c;如果这个机器挂了&#xff0c;那么对应的客户端服务也相继断开性能/支持的并发量有限 所以为了解决这些问题&#xff0c;就要引入分布式系统&#xff0c…

帕金森常见情况解读

一、身体出现的异常节奏​ 帕金森会让身体原本协调的 “舞步” 出现错乱。它是一种影响身体行动能力的状况&#xff0c;随着时间推进&#xff0c;就像老旧的时钟&#xff0c;齿轮转动不再顺畅&#xff0c;使得身体各个部位的配合逐渐失衡&#xff0c;打乱日常行动的节奏。​ …

清华大学发Nature!光学工程+神经网络创新结合

2025深度学习发论文&模型涨点之——光学工程神经网络 清华大学的一项开创性研究成果在《Nature》上发表&#xff0c;为光学神经网络的发展注入了强劲动力。该研究团队巧妙地提出了一种全前向模式&#xff08;Fully Forward Mode&#xff0c;FFM&#xff09;的训练方法&…

【android bluetooth 案例分析 04】【Carplay 详解 3】【Carplay 连接之车机主动连手机】

1. 背景 在前面的文章中&#xff0c;我们已经介绍了 carplay 在车机中的角色划分&#xff0c; 并实际分析了 手机主动连接车机的案例。 感兴趣可以 查看如下文章介绍。 【android bluetooth 案例分析 04】【Carplay 详解 1】【CarPlay 在车机侧的蓝牙通信原理与角色划分详解】…

C++学习-入门到精通【11】输入/输出流的深入剖析

C学习-入门到精通【11】输入/输出流的深入剖析 目录 C学习-入门到精通【11】输入/输出流的深入剖析一、流1.传统流和标准流2.iostream库的头文件3.输入/输出流的类的对象 二、输出流1.char* 变量的输出2.使用成员函数put进行字符输出 三、输入流1.get和getline成员函数2.istrea…

NW969NW978美光闪存颗粒NW980NW984

NW969NW978美光闪存颗粒NW980NW984 技术解析&#xff1a;NW969、NW978、NW980与NW984的架构创新 美光&#xff08;Micron&#xff09;的闪存颗粒系列&#xff0c;尤其是NW969、NW978、NW980和NW984&#xff0c;代表了存储技术的前沿突破。这些产品均采用第九代3D TLC&#xf…

使用 ssld 提取CMS 签名并重签名

拿SpringBoard的cms签名和entitlements.xml&#xff0c;对tihook.dylib进行重签名 工具来源&#xff1a;https://github.com/eksenior/ssld