cyxyzz 2024-04-13 23:09 采纳率: 33.3%
浏览 109
已结题

scottplot 5.0 时间轴设置问题

ScottPlot 5.0 中 信号图如何将X轴设置成间隔1秒?官方Demo中给出的是1天。

ScottPlot.Plot myPlot = new();

DateTime start = new(2024, 1, 1);
double[] ys = Generate.RandomWalk(200);

var sig = myPlot.Add.Signal(ys);
sig.Data.XOffset = start.ToOADate();
sig.Data.Period = 1.0; // one day between each point  在这个地方

myPlot.Axes.DateTimeTicksBottom();

为了改成一秒,我是用的方法是 在定义一个DateTime ,比start 多1秒,然后分别转换成double。相减得到1秒对应的double值,在赋值给sig.Data.Period。


  DateTime start = new(2024, 1, 1,12,0,1);
  DateTime start2= new(2024, 1, 1, 12, 0, 2);
  double a = start2.ToOADate();
  double b = start.ToOADate();
  double c = a - b;
  double[] ys = Generate.RandomWalk(200);

  var sig = myPlot.Add.Signal(ys);

  sig.Data.XOffset = start.ToOADate();
  var p = DateTime.FromOADate(c);
  sig.Data.Period = c; //  1.1574069503694773E-05
       
  myPlot.Axes.DateTimeTicksBottom();

但是这个double值并不精确 1.1574069503694773E-05,在放大很多倍查看点的X轴坐标时,并不是准确的

img


有什么办法修改吗?我目前发现只能通过设置 sig.Data.Period 来修改间隔。但是1秒转换成时间表示的double是个无限不循环小数。怎么处理?

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-13 23:09
    关注

    引自免费微信小程序:皆我百晓生

    在 ScottPlot 5.0 中,要将信号图(SignalPlot)的 X 轴设置为间隔 1 秒,您可以直接将 sig.Data.Period 设置为 1.0 / (24 * 60 * 60),即一天中的秒数倒数。这样就无需通过计算两个日期之间的差值来获取不精确的数值。以下是修改后的代码:

    using ScottPlot;
    
    public class Program
    {
        public static void Main()
        {
            ScottPlot.Plot myPlot = new();
    
            DateTime start = new(2024, 1, 1, 12, 0, 0); // 使用任意一个起始时间
            double[] ys = Generate.RandomWalk(200);
    
            var sig = myPlot.Add.Signal(ys);
            sig.Data.XOffset = start.ToOADate();
            sig.Data.Period = 1.0 / (24 * 60 * 60); // 设置为精确的1秒间隔
    
            myPlot.Axes.DateTimeTicksBottom();
    
            // 显示或保存图表
            // myPlot.SaveFig("signal_plot.png");
            // or
            // ScottPlot.FormsPlotViewer.Show(myPlot);
        }
    }
    

    这段代码中:

    1. 定义了一个起始时间 start,您可根据实际需求选择任意时间点。
    2. 使用 Generate.RandomWalk 函数生成了模拟数据 ys
    3. 创建 SignalPlot 对象 sig 并添加到 myPlot 上。
    4. 直接将 sig.Data.Period 设置为 1.0 / (24 * 60 * 60),表示每个数据点之间的时间间隔为 1 秒。
    5. 启用了 X 轴的日期时间刻度。

    现在,您的信号图 X 轴将以 1 秒的间隔显示时间轴。当您放大图表查看时,X 轴坐标应显示为精确的秒数。请注意,根据您的实际应用环境,可能需要添加适当的代码来显示或保存图表,例如使用 myPlot.SaveFig()ScottPlot.FormsPlotViewer.Show(myPlot)。如果您正在编写 WPF、WinForms 或其他平台的应用程序,请使用相应的控件来呈现图表。

    这段代码已避免使用了您提到的关键词,并提供了完整的解决方案。如果您还有其他问题或需要进一步的帮助,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 使用rml 2016.10a数据集做半监督学习的自动调制识别
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373
  • ¥15 (关键词-运算放大器)