C# Chart控件标记问题详解
作者:IC00 发布时间:2023-01-23 03:37:35
标签:C#,Chart,控件,标记
前言
在做项目的时候,遇到一个需求,需要我对Chart图标标记数据正在运行,实现数据可视化,因为我们的表格是隐藏Y轴的刻度是看不到数据值的,于是采用数据标记的形式来动态展示值,那么我们应该怎么去处理这个问题呢,阅读这篇文章吧,我们一起学习学习一下,创作不易,大家点赞关注评论收藏,你的点赞和关注是我创作的动力,也是我持续不断学习的动力。谢谢大家啦!!!
效果展示
先来展示一下我们的效果,看看是怎么回事,在看看有没有欲望往下面看看文章,主要是对Chart图的标记问题做了处理,我们使用了Chart控件的一个对Point点的设置实现这种动态展示Chart图的标记,两张图的效果对比非常明显,对于我们 有这样的需求的项目可以采用这样的形式,或者采用另一种的鼠标点击弹出提示,下篇文章应该会写出来和大家一起学习一下,大家多点赞,我创作的动力更强。
解决方法
我们来看一下解决的方法,我使用Chart控件里面对Point的MarkerStyle 进行标记,实现这样的方式,对MarkerStyle 的样式设置标记大小,标记颜色,以及标记展示的值,使用的是随机函数产生的数据,生成的表格,对表格的数据添加,然后在对这个点进行标记,只标记最新是使用标一个去一个的方式,就是我把最新的标记好,把上一个去掉标记,哪个按钮我只给了一个状态值让它去判断是最新还是一直标记,也可以加个状态不标记。后面贴了代码你们可以后期自己二次更新。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace TestIC00
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
public int index = 0;
public bool flag = false;
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = !timer1.Enabled;//对定时器的操作,点击打开或关闭定时器,主要是实现一秒传一个值
}
private void timer1_Tick(object sender, EventArgs e)
{
Random random = new Random();
this.chart1.ChartAreas[0].AxisX.MajorGrid.Interval = 1;//网格间隔
this.chart1.ChartAreas[0].AxisX.MinorGrid.Interval = 1;
this.chart1.ChartAreas[0].AxisY.MajorGrid.Interval = 1;//网格间隔
this.chart1.ChartAreas[0].AxisY.MinorGrid.Interval = 1;
this.chart1.ChartAreas[0].AxisX.LabelStyle.Interval = 1;//设置X轴的值的间隔大小
this.chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;//设置X轴网格线颜色
this.chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;//设置Y轴网格线颜色
chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;//启动滚动条
this.chart1.ChartAreas[0].AxisY.LabelStyle.Enabled = false;//使Y轴的刻度隐藏
chart1.ChartAreas[0].AxisX.ScaleView.Scroll(System.Windows.Forms.DataVisualization.Charting.ScrollType.Last);//启用视图实现数据滚动
int value = random.Next(0, 20);//产生随机数进行赋值
chart1.Series[0].Points.AddY(value);//对折线图添加数据
if(flag)//判断标记,如果是true表示只标记最新,需要去掉前面的一个值
{
this.chart1.Series[0].Points[index].MarkerStyle = MarkerStyle.Circle;//设置标记的形状为圆形
this.chart1.Series[0].Points[index].MarkerColor = Color.Red;//形状颜色设置
this.chart1.Series[0].Points[index].MarkerBorderWidth = 3;//形状大小设置
this.chart1.Series[0].Points[index].MarkerSize = 10;//设置我们展示标记的大小
this.chart1.Series[0].Points[index].Label = "功能:" + this.chart1.Series[0].Name + "\r\n" + "值:" + value.ToString();//对标记展示的值
this.chart1.Series[0].Points[index].IsValueShownAsLabel = true;//展示标记
this.chart1.Series[0].Points[index-1].MarkerBorderWidth = 0;//改前一个标记的大小
this.chart1.Series[0].Points[index - 1].MarkerSize = 0;//形状大小
this.chart1.Series[0].Points[index - 1].Label = "";//展示数据
this.chart1.Series[0].Points[index - 1].IsValueShownAsLabel = false;//不展示
}
else//对数据一直标记
{
this.chart1.Series[0].Points[index].MarkerStyle = MarkerStyle.Circle;
this.chart1.Series[0].Points[index].MarkerColor = Color.Red;
this.chart1.Series[0].Points[index].MarkerBorderWidth = 3;
this.chart1.Series[0].Points[index].MarkerSize = 10;
this.chart1.Series[0].Points[index].Label = "功能:" + this.chart1.Series[0].Name + "\r\n" + "值:" + value.ToString();
this.chart1.Series[0].Points[index].IsValueShownAsLabel = true;
}
//也可以加一种状态是什么也不标记,你们自己对那个状态值的处理就可以啦
index++;
}
private void button2_Click(object sender, EventArgs e)//只标记最新按钮
{
flag = !flag;//对状态值的改变,我就使用了两种状态,你们可以改
}
}
}
来源:https://juejin.cn/post/7132818750155259912


猜你喜欢
- 这篇文章主要介绍了简单了解Spring中BeanFactory与FactoryBean的区别,文中通过示例代码介绍的非常详细,对大家的学习或
- 一 引入项目有个新需求,当点击或触碰TextBox时,基于TextBox的相对位置,弹出一个自定义的Keyboard,如下图所示:二 Key
- 本文实例为大家分享了Android系统工具类的具体代码,供大家参考,具体内容如下系统工具类public class systemUtil {
- 通用配置#下面介绍的整合JDBC和整合MyBatis都需要添加的实体类和配置数据库表#CREATE TABLE `user` ( `id`
- 所谓c#图片处理高级应,多数是基于.net framework类库完成using system;using system.collectio
- 一、首先在主布局中,用帧布局来填充 RecycleView 和 两个模拟发送消息的Button<?xml version="
- 以前,如果我们希望构建支持foreach枚举的自定义集合,只能实现IEnumerable接口(可能还有IEnumerator()),返回值还
- 本文实例为大家分享了Android实现中国象棋游戏的具体代码,供大家参考,具体内容如下实现环境: android studio
- 1.属性驱动 前台表单中字段的name和后台action中的属性字段的名称必须保持一致;2.域驱动 前台表单中字段的name应该为:obje
- 1.由json字符串转换成Map对象如json字符串:{"contend":[{"bid":&quo
- 实际需求<if test="computationRule == '1'"> F
- 本文实例为大家分享了JSON处理工具类的具体代码,供大家参考,具体内容如下import java.io.IOException; impor
- 端口设置和contextpath的配置端口设置Spring boot 默认端口是8080,如果想要进行更改的话,只需要修改applicato
- 1.监听(Listener)<!-- 配置监听 --><listener><listener-class>
- /// <summary> /// 安装的excel的版本,0为没有安装,大于1说明安装了多个. /// </summar
- 前提:已经配置Zuul网关参考:https://www.jb51.net/article/182894.htm限流方式:1)nginx层限流
- 两个接口都是继承自Collection.List (inteface) 次序是List 的最重要特点,它确保维护元素特定的顺序. --Arr
- 本文实例讲述了JAVA基于数组实现的商品信息查询功能。分享给大家供大家参考,具体如下:综合一维数组和二维数组的相关知识,以及数组排序的多种算
- 前言开发系统时,有时候在实现功能时,删除操作需要实现逻辑删除就是将数据标记为删除,而并非真的物理删除(非DELETE操作),查询时需要携带状
- 规则1(无继承情况下):对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、