干货ScottPlot4向ScottPlot5迁移

news2024/12/28 23:18:26

干货ScottPlot4向ScottPlot5迁移

  • 干货满满
  • 1.背景
  • 2.需求的引出
  • 3.先说结论
    • 1.好消息
    • 2.坏消息
  • 4.迁移的部分笔记
    • Color
    • ScottPlot.Plottable
      • ScottPlot.Plottables中的对象如何定义
      • 添加 ScottPlot.Plottable.ScatterPlot 对象
        • Scatter
        • Polygon
        • Marker也类似
      • Scatter的marker
    • formsPlot1
      • Render()没有了
      • 定义
    • 锁定Y轴
    • 获取鼠标位置
    • Scatter
    • 配置相关
      • 锁定图表
  • 总结

干货满满

为什么说干货满满,是因为就是现在,就在当下,如果有这样的需求:ScottPlot4向ScottPlot5迁移,那么你去GPT问也没有正确的答案。我是说当下任何一个GPT目前都不行。

所以,至少在当下,是原创。因为各论坛也没有。

1.背景

我是个很懒人,众所周知我是能完成功能,绝不多做一点。所以,如果要我去做一件事,特别是从XX n升级 n+1,我是绝对没有兴趣的。

但是确实遇到了问题。
因为发现加载的数据足够多时,它就锁住不动了。见下图。
在这里插入图片描述
我的E14小破本,就不争气进狂叫半天。有时能活过来,有时就不行了。
特别是这里右键,想要还原,就灰了。
在这里插入图片描述
或者鼠标一直在转。
这确是一个问题。
当然,在最终的版本,这可能也不是问题,因为那时,可以利用过滤器,建一个数据窗,将视图保护起来,每次只显示很少的数据。

但现在,我还没有那样的时间。
其实我也有ScottPlot 4.1 的代码,但现在能不折腾就不折腾了,不想去看代码。
事实上,这种情况是很容易定位的。因为只需要pause一下,一般就能定位到出问题的位置。
但这机会,还是留给其它人吧~~~

2.需求的引出

在这样的情况下,我想到了是不是新的版本,性能能够好一些。正好今天上午就算是完成了本周的进度。早晨来早了,以至于忘了刷卡。好吧。说正事。
有时间,可以试一下。

3.先说结论

1.好消息

1。 的确 5上面没有这个问题。
我再详细说明一个这个问题,大至是如果数据量特别大,放大到第4次,ScottPlot 4就开始卡了。而且这种卡,是无法反转的。
我的机器也还成吧,没有独立显卡,内存16G。而且装的是windows10.
同样的情况,在5上,是没有的!
初始
在这里插入图片描述
第3次 zoom
在这里插入图片描述
第5次,还是正常的,而且能看到右键菜单:
在这里插入图片描述

第8次放大
在这里插入图片描述
第10次放大
在这里插入图片描述
总之不卡,也能还原。

这算是一个好的消息。
但坏消息,我们慢慢道来!

2.坏消息

2。 绝对不推荐用ScottPlot 5!
因为之前,我介绍过一些ScottPlot 5的一些问题,所以我是一直避之唯恐不急。
所以,当我用它时,才知道,真是难用极了。
有许多想要吐槽的。
但是我不想多说了,因为当你用的时候你就清楚了是吧。

本文只说有用的,下面的干货就是如何来迁移!

4.迁移的部分笔记

说明,这里只有很少的一部分,因为有一些我也没研究。

Color

不是这事有多重要,我是想到那写到哪。
5.0 用 ScottPlot.Color 代替了 System.Drawing.Color
带来的问题如何解决?
1。 应将所有与ScottPlot相关的部分,都改为 ScottPlot.Color
2。 划重点:
类例这样进行转换
ScottPlot.Plottables.Polygon
task_polygon.FillColor = ScottPlot.Color.FromColor(System.Drawing.Color.White);

ScottPlot.Plottable

ScottPlot.Plottable不见了。
这里要写很多字,本应该,因为这事,初期引起了我的恐慌。因为我用了特别多,网上查不到,其5.0源代码中,也查不到。
后来逐渐才知道,
改成
ScottPlot.Plottables
后面加了一个s。
但是,要注意,5.0与4.0是完全不同的东西,不要认为只是换了namespace就OK了。
从来没有这样的情况发生!

ScottPlot.Plottables中的对象如何定义

4.0
ScottPlot.Plottable.Polygon
在5
ScottPlot.Plottables.Polygon

4.0
ScottPlot.Plottable.ScatterPlot
5.0
ScottPlot.Plottables.Scatter

添加 ScottPlot.Plottable.ScatterPlot 对象

Scatter

4.0

        //create genline
        public ScottPlot.Plottable.ScatterPlot CreateGenLine(Plot plt)
        {   
            task_line = new ScottPlot.Plottable.ScatterPlot(line_xs, line_ys);
            task_line.MarkerSize = 0;
            task_line.Color = CmbTask.Generated.CategoryColor;
            task_line.LineWidth = 0.01;
            plt.Add(task_line);
            return task_line;
        }

5.0

        //create genline
        public ScottPlot.Plottables.Scatter CreateGenLine(Plot plt)
        {  
           ScottPlot.Plottables.Scatter task_line = plt.Add.Scatter(line_xs, line_ys,CmbTask.Generated.CategoryColor);
            return task_line;
        }
Polygon

4.0

        public Polygon CreateTaskPolygon(Plot plt)
        {
            task_polygon = plt.AddPolygon(xs_tsk_rect, ys_tsk_rect);
            if (null != CmbTask.Ended) {
                task_polygon.Color = CmbTask.Ended.CategoryColor;
            }  else {
                task_polygon.Color = Color.White;
            }
            return task_polygon;
        }

5.0

        public ScottPlot.Plottables.Polygon CreateTaskPolygon(Plot plt)
        {
            ScottPlot.Plottables.Polygon 
            task_polygon = plt.Add.Polygon(xs_tsk_rect, ys_tsk_rect);
            if (null != CmbTask.Ended)
            {
                task_polygon.FillColor = CmbTask.Ended.CategoryColor;
            }else {
                task_polygon.FillColor = ScottPlot.Color.FromColor(System.Drawing.Color.White);
            }
            return task_polygon;
        }
Marker也类似

ScottPlot.Plottable.MarkerPlot Marker
var marker = new ScottPlot.Plottable.MarkerPlot();
marker.X = xArValues[curindex++];
marker.Y = ycurValues;
marker.MarkerSize = 9;
marker.MarkerShape = markerShape;
marker.Color = task.CategoryColor;
task.Marker = marker;
plt.Add(marker);
改为
ScottPlot.Plottables.Marker Marker
var marker = plt.Add.Marker(x: xArValues[curindex++], y: ycurValues);

                    marker.MarkerSize = 9;
                    marker.MarkerStyle.Shape = markerShapes;
                    marker.MarkerStyle.FillColor = task.CategoryColor;
                    task.Marker = marker;

Scatter的marker

4.0

MarkerShape markerShape;
markerShape = MarkerShape.filledSquare;
var curScatter = plt.AddScatter(xArValues, yArValues, markerShape: markerShape)

5.0

MarkerShape markerShapes;
markerShapes = MarkerShape.FilledSquare;
var curScatter = plt.Add.Scatter(xArValues, yArValues);
                curScatter.MarkerShape = markerShapes;

formsPlot1

Render()没有了

this.formsPlot1.Refresh();

定义

private ScottPlot.FormsPlot formsPlot1;
this.formsPlot1 = new ScottPlot.FormsPlot();
改为
this.formsPlot1 = new ScottPlot.WinForms.FormsPlot();
private ScottPlot.WinForms.FormsPlot formsPlot1;

还是因为跨平台。。。就是laji,我从来都是反对跨平台的。

锁定Y轴

    private void chkLockY_CheckedChanged(object sender, EventArgs e)
    {
        bool isLocked = ((CheckBox)sender).Checked;
        formsPlot1.Configuration.LockVerticalAxis = isLocked;
    }

改为
private void chkLockY_CheckedChanged(object sender, EventArgs e)
{
bool isLocked = ((CheckBox)sender).Checked;
plt.Axes.Rules.Add(new ScottPlot.AxisRules.LockedVertical(plt.Axes.Left, plt.Axes.Left.Range.Min, plt.Axes.Left.Range.Max));
}

获取鼠标位置

    private void formsPlot1_MouseUp(object sender, MouseEventArgs e)
    {

(double x, double y) = formsPlot1.GetMouseCoordinates();
改为:
Coordinates mouseNow = formsPlot1.Plot.GetCoordinates(e.X, e.Y);

Scatter

上面写过了,再写一遍
var curScatter = plt.AddScatter(xArValues, yArValues, lineStyle: LineStyle.DashDotDot);
改为:
var curScatter = plt.Add.Scatter(xArValues, yArValues);

配置相关

锁定图表

4。0
formsPlot1.Configuration.RightClickDragZoom = false;
5。0
formsPlot1.UserInputProcessor.RightClickDragZoom(false);
复杂了太多。

总结

1。 命令空间加了s
2。 对象必须由Scott来生成,用户不能自己创建了。
3。 一些模糊的属性名称没了。例如Color,都改为类似FillColor之类的。
4。很多地方,非常糟糕,甚至从示例的比较中,就能知道5.0有多糟糕。

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

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

相关文章

Github优质项目推荐(第九期)

文章目录 Github优质项目推荐(第九期)一、【tldraw】,37.1k stars - 在 React 中创建无限画布体验的库二、【zapret】,9.1k stars - 独立(无需第三方服务器)DPI 规避工具三、【uBlock】,48.3k s…

学习threejs,THREE.PlaneGeometry 二维平面几何体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️HREE.PlaneGeometry 二维平…

力扣矩阵-算法模版总结

lc-73.矩阵置零-(时隔14天)-12.27 思路:(23min22s) 1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据…

面向对象的设计原则与设计模式

目的 设计模式的目的是提高代码的重用性,可读性、可扩展性、可靠性,使程序呈现高内聚,低耦合的特性 原则 单一职责原则 假设有一个class负责两个职责,一旦发生需求变更,修改其中一个职责的逻辑代码,有可能…

网络安全词云图与技术浅谈

网络安全词云图与技术浅谈 一、网络安全词云图生成 为了直观地展示网络安全领域的关键术语,我们可以通过词云图(Word Cloud)的形式来呈现。词云图是一种数据可视化工具,它通过字体大小和颜色的差异来突出显示文本中出现频率较高…

Jsonlizer,一个把C++各类数据转成 Json 结构体的玩意儿

这段时间突发奇想,觉得可以弄一个Json和C各种数据类型互转的工具,因为Json在进行数据储存的时候,有一些先天的优势,传统的C的序列化方式是将数据序列化到流数据里面,而流数据是典型的串行结构(或则说是一维…

删除拼排序链表中的重复元素(最优解)

题目来源 82. 删除排序链表中的重复元素 II - 力扣(LeetCode) 题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head…

OpenHarmony-5.PM 子系统(2)

电池服务组件OpenHarmony-4.1-Release 1.电池服务组件 Battery Manager 提供了电池信息查询的接口,同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。电池服务组件提供如下功能: 电池信息查询。充放电状态查询。关机充电。 电池服务组件架…

深入浅出 Linux 操作系统

深入浅出 Linux 操作系统 引言 在当今数字化的时代,Linux 操作系统无处不在。从支撑互联网巨头庞大的数据中心,到嵌入智能家居设备的微型芯片,Linux 都发挥着关键作用。然而,对于许多人来说,Linux 仍笼罩着一层神秘的…

uniapp 文本转语音

uniapp 文本转语音 基于 Minimax API 的 UniApp 文本转语音工具,支持文本分段、队列播放、暂停恢复等功能。目前只内置了 Minimax文本转语音Minimax 的语音生成技术以其自然、情感丰富和实时性强而著称 API_KEY、GroupId 获取方法 https://platform.minimaxi.com…

前端图像处理(二)

目录 一、上传 1.1、文件夹上传以及进度追踪 1.2、拖拽上传 1.3、图片裁剪上传原理 二、图片布局 2.1、渐进式图片 2.2、图片九宫格 2.3、轮播图(Js) 2.3.1、3D动画轮播图 2.3.2、旋转切换的轮播图 2.4、卡片移入翻转效果 2.5、环绕式照片墙 一、上传 1.1、文件夹…

3.BMS系统原理图解读

一、BMS电池板 (1)电池的连接关系:串联 (2)采样控制点:CELL0 - CELL5 (3)端子P1和P3:BAT和BAT- (4)开关S1:控制充放电回路的机械开关 二、BMS控制板 (1)主控MCU 电源 复位 晶振 (2)LED指示灯:4电量指示 1调试指…

用于汽车碰撞仿真的 Ansys LS-DYNA

使用 Ansys LS-DYNA 进行汽车碰撞仿真汽车碰撞仿真 简介 汽车碰撞仿真是汽车设计和安全工程的一个关键方面。这些仿真使工程师能够预测车辆在碰撞过程中的行为,从而有助于改进安全功能、增强车辆结构并符合监管标准。Ansys LS-DYNA 是一款广泛用于此类仿真的强大工具…

使用Java和不同HTTP客户端库发送各种Content-Type类型请求

1. 引言 在HTTP协议中,Content-Type头用于指示请求或响应中数据的媒体类型。了解和正确设置Content-Type 对于确保客户端和服务器之间正确解析数据至关重要。本文将介绍如何使用Java 和 不同的HTTP客户端发送各种Content-Type 类型的请求。 2. 常见的Content-Type…

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…

【单片机通讯协议】—— 常用的UART/I2C/SPI等通讯协议的基本原理与时序分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、通信基本知识1.1 MCU的参见外设1.2 通信的分类按基本的类型从传输方向上来分 二、UART(串口通讯)2.1 简介2.2 时序图分析2.3 UART的…

Docker 部署 plumelog 最新版本 实现日志采集

1.配置plumelog.yml version: 3 services:plumelog:#此镜像是基于plumelog-3.5.3版本image: registry.cn-hangzhou.aliyuncs.com/k8s-xiyan/plumelog:3.5.3container_name: plumelogports:- "8891:8891"environment:plumelog.model: redisplumelog.queue.redis.redi…

Empire Lupin One靶机

靶机 ip:192.168.152.157 我们访问页面 第一步信息收集 我们先扫描一下端口 扫描到开启了 22 端口 80 端口 我们使用御剑扫描一下网站的后台 我们挨个访问一下 发现 apache 的帮助页面,暂时记录,看看等会有没有需要 我们查看到 robots.tx…

WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)

项目中要用到样条曲线,必须过顶点,圆滑后还不能太走样,捣鼓一番,发现里面颇有玄机,于是把我多方抄来改造的方法发出来,方便新手: 如上图,看代码吧: -------------------…

绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图

clc clear close all %% 读取数据 load(MyColor.mat) %读取颜色包for iloop 1:25 %提取工作表数据data0(iloop) {readtable(data.xlsx,sheet,iloop)}; end%% 解析数据 countzeros(23,14); for iloop 1:25index(iloop) { cell2mat(table2array(data0{1,iloop}(1,1)))};data(i…