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日
  • 展开全部

悬赏问题

  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多