qq_58891096 2023-04-13 16:35 采纳率: 36.4%
浏览 89
已结题

oxyplot折线图

大家下午好,当我的横坐标是书值类型的轴,纵坐标也是数值类型的轴,坐标轴以及折线声明如下,添加数据点的横纵坐标都是数值类型

 // 定义X轴
            var LinearAxis = new LinearAxis
            {
                Position = AxisPosition.Bottom,
                Title = "点数"
            };

            //定义第Y轴
            var LinearAyis = new LinearAxis()
            {
                Key = "y2",
                Position = AxisPosition.Right,
                IsZoomEnabled = true,
                IsPanEnabled = true,
                Title = "值"
            };         

            List<DataPoint> dataPoints = new List<DataPoint>();

            var lineSeries = new ThreeColorLineSeries()
            {
                Title = "数据趋势",
                ItemsSource = dataPoints,
 
            };
            
            for (int i = 0; i < LineDataSet.Count; i++)
            {         
                var number = i+1;
                var value = LineDataSet[i].isc;
                dataPoints.Add(new DataPoint(DateTimeAxis.ToDouble(number), value));             
            }
      
            model.Series.Add(lineSeries);
            model.Axes.Add(LinearAyis);
            model.Axes.Add(LinearAxis);

            // 设置图形边框
            model.PlotAreaBorderThickness = new OxyThickness(1, 0, 1, 1);

对应折线图的效果如下

img

我现在就想当我鼠标触碰到线上时,显示的是我每个点对应的日期时间,日期时间我可以获取到,所以我试着把横坐标轴换成了日期时间轴也就是代码里面的

  var ax = new DateTimeAxis()
             {         
                   Position = AxisPosition.Bottom,
                  Title = "点数"
               };

但是显示出来的效果却不尽如人意,效果如下,我上面因为我点的日期都是间隔一秒一个,导致我的点都挤在一起,而且在有的时间段里面我的线条对应没有点,但图表会强行连接起来,如下图,下面我圈起来的有一定倾斜角的直线上都是没有数据的

img

所以我现在想要上面第一种那种折线效果,横坐标轴可有可无,与第一个图的差别就是当鼠标触碰到上面的折线是鼠标横坐标显示的是对应点的日期,但是不要想图2一样点挤在一起。每个点横坐标显示日期时间,纵坐标显示一个参数值

  • 写回答

6条回答 默认 最新

  • 极客智能体-在线 2023-04-13 20:58
    关注

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    要让鼠标悬停在折线上时,显示对应点的日期时间,可以继续使用DateTimeAxis作为横坐标轴,但需要调整其显示格式和坐标间隔,以确保日期时间的显示清晰可辨,同时避免坐标点挤在一起。

    具体来说,可以通过以下方式调整DateTimeAxis:

    1.设置DateTime格式:使用DateTimeAxis的StringFormat属性,设置日期显示格式,例如:"HH:mm:ss"表示显示小时、分钟、秒。

    2.设置坐标间隔:使用DateTimeAxis的IntervalType属性和Interval属性,设定坐标点的间隔类型和间隔值,例如:"Seconds"类型,间隔值为1秒。

    调整后的代码如下:

    //定义X轴
    var ax = new DateTimeAxis()
    {
        Position = AxisPosition.Bottom,
        Title = "时间",
        StringFormat = "HH:mm:ss",
        IntervalType = DateTimeIntervalType.Seconds,
        Interval = 1
    };
    
    //定义Y轴
    var ay = new LinearAxis()
    {
        Position = AxisPosition.Right,
        Title = "值"
    };
    
    List<DataPoint> dataPoints = new List<DataPoint>();
    
    var lineSeries = new LineSeries()
    {
        Title = "数据趋势",
        ItemsSource = dataPoints,
    };
                
    for (int i = 0; i < LineDataSet.Count; i++)
    {         
        var time = LineDataSet[i].time;
        var value = LineDataSet[i].isc;
        dataPoints.Add(new DataPoint(DateTimeAxis.ToDouble(time), value));             
    }
    
    model.Series.Add(lineSeries);
    model.Axes.Add(ay);
    model.Axes.Add(ax);
    

    上述代码中,使用了DateTimeIntervalType的Seconds类型,并设置坐标间隔为1秒,确保了折线上的坐标点不会挤在一起。同时,通过StringFormat属性设置了日期时间的格式。

    这样处理后,当鼠标悬停在折线上时,图表会显示对应点的横坐标日期时间。
    如果我的回答解决了您的问题,请采纳!

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

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 赞助了问题酬金15元 4月13日
  • 赞助了问题酬金15元 4月13日
  • 展开全部

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?