精华内容
下载资源
问答
  • wpf图表可视化
    千次阅读
    2019-10-29 22:37:40

    需求

    为了实现一个完整软件系统,必须具备一些基本的数据呈现控件,例如曲线图、柱状图、饼图等。本次的业务需求为:利用LiveCharts展示后台模拟的温度变化。像Winform里面,微软为我们提供了比较完整的Chart控件,但是在WPF组件中,就没有找到类似的控件,它的意图是让我们自己去实现。我们应该对当下的代码共享时代环抱感激,迄今位置有很多面向WPF的第三方控件库,大部分都是免费开源的。例如:OxyPlot、ModernuiCharts......以及我们今天的主角——LiveCharts。这是一个具备动画效果的图表控件。

    首先上效果:

     

    环境

    Windows 10

    Visual Studio 2019

    .Net Framework 4.7.2

    Ninject

    LiveCharts

    LiveCharts.Wpf

     

    实现

    1.通过NuGet引入Ninject、LiveCharts.Wpf、LiveCharts程序包。

    解决方案资源管理器-->项目(右键)-->管理NuGet程序包

    在“浏览”中搜索:

    Ninject

    LiveCharts

    LiveCharts.Wpf

    并安装,完成之后如下图所示:

     

    2.在XAML中引用LiveCharts控件的程序集。

    在ChamberView.xaml文件的节点上添加对程序集的应用,如下:

    <local:AnimationPageBaseView x:Class="Deamon.View.ChamberView"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
          xmlns:local="clr-namespace:Deamon.View"
          xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
          Title="ChamberView">

    其中 xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"就是命名空间的引用。

    3.使用LiveCharts控件,值用绑定的方式传递到界面。

                        <lvc:CartesianChart Grid.Row="1" AnimationsSpeed="0:0:0.2" Hoverable="False" DataTooltip="{x:Null}">
                            <lvc:CartesianChart.Series>
                                <lvc:LineSeries Values="{Binding ChartValues}" 
                                        PointGeometry="{x:Null}"
                                    LineSmoothness="0"
                                    StrokeThickness="3" 
                                    Stroke="#12B1AD"
                                    Fill="#E6F7F8"/>
                            </lvc:CartesianChart.Series>
                            <lvc:CartesianChart.AxisX>
                                <lvc:Axis LabelFormatter="{Binding DateTimeFormatter}" 
                              MaxValue="{Binding AxisMax}" 
                              MinValue="{Binding AxisMin}" ShowLabels="False"
                              Unit="{Binding AxisUnit}">
                                    <lvc:Axis.Separator>
                                        <lvc:Separator Step="{Binding AxisStep}" />
                                    </lvc:Axis.Separator>
                                </lvc:Axis>
                            </lvc:CartesianChart.AxisX>
                            <lvc:CartesianChart.AxisY>
                                <lvc:Axis ShowLabels="false"  />
                            </lvc:CartesianChart.AxisY>
                        </lvc:CartesianChart>

    如上所示,我们这里有一些属性是通过绑定来赋值的。因此接下来我们来完善这块工作。

    4.数据绑定与刷新

    4.1定义一个数据点结构——MeasureModel

        /// <summary>
        /// 测量模型
        /// </summary>
        public class MeasureModel
        {
            /// <summary>
            /// X 轴数据
            /// </summary>
            public DateTime DateTime { get; set; }
    
            /// <summary>
            /// Y 轴数据
            /// </summary>
            public double Value { get; set; }
        }

    4.2定义界面相关的视图模型ViewModel

    定义通知属性、普通属性和命令以及构造时初始化等工作。

    using Deamon.Util.DI;
    using LiveCharts;
    using LiveCharts.Configurations;
    using System;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace Deamon.ViewModel
    {    
        /// <summary>
        /// 房间信息
        /// </summary>
        public class ChamberViewModel : BaseViewModel
        {
            /// <summary>
            /// 默认构造函数
            /// </summary>
            public ChamberViewModel()
            {
                // 初始化创建一个 X Y 轴上数据显示的图表,并确定 X Y 轴的数据结构
                var mapper = Mappers.Xy<MeasureModel>()
                  .X(model => model.DateTime.Ticks) 
                  .Y(model => model.Value);
    
                // 配置这个图表,可以被其他地方(特定的方式)使用
                Charting.For<MeasureModel>(mapper);
    
                // 初始化测量的数据集
                ChartValues = new ChartValues<MeasureModel>();
    
                // 设置 X 轴显示的标签格式
                DateTimeFormatter = value => new DateTime((long)value).ToString("mm:ss");
    
                // 设置图表的其他相关属性
                AxisStep = TimeSpan.FromSeconds(1).Ticks;
                AxisUnit = TimeSpan.TicksPerSecond;
    
                SetAxisLimits(DateTime.Now);
    
                // 默认情况下开始数据刷新
                IsReading = false;
                this.InjectStopOnClick();
            }
    
            #region 公共命令
    
            /// <summary>
            /// 显示导航栏命令
            /// </summary>
            public RelayCommand ShowBarCommand
            {
                get
                {
                    return new RelayCommand(() =>
                    {
                        IoC.Get<ApplicationViewModel>().HasNavigationBar = true;
                    });
                }
            }
    
            /// <summary>
            /// 显示导航栏命令
            /// </summary>
            public RelayCommand ReadingCommand
            {
                get
                {
                    return new RelayCommand(() =>
                    {
                        this.InjectStopOnClick();
                        RaisePropertyChanged(nameof(ReadingCommandText));
                    });
                }
            }
    
            #endregion
    
            #region 属性
    
            /// <summary>
            /// 缓存的测量数据
            /// </summary>
            public ChartValues<MeasureModel> ChartValues { get; set; }
    
            /// <summary>
            /// 时间格式化器
            /// </summary>
            public Func<double, string> DateTimeFormatter { get; set; }
    
            /// <summary>
            /// X 轴上每个数据的等距跳变(时)长
            /// </summary>
            public double AxisStep { get; set; }
            public double AxisUnit { get; set; }
    
            /// <summary>
            /// 正在读取
            /// </summary>
            public bool IsReading { get; set; }
    
            /// <summary>
            /// 控制按钮的文本
            /// </summary>
            public string ReadingCommandText
            {
                get
                {
                    return IsReading ? "Stop" : "Start";
                }
            }
    
            private string curvalue;
    
            /// <summary>
            /// 当前值
            /// </summary>
            public string Curvalue
            {
                get { return curvalue; }
                set
                {
                    curvalue = value;
                    RaisePropertyChanged(nameof(Curvalue));
                }
            }
    
            private double axisMax;
    
            /// <summary>
            /// X轴最大
            /// </summary>
            public double AxisMax
            {
                get { return axisMax; }
                set
                {
                    axisMax = value;
                    RaisePropertyChanged(nameof(AxisMax));
                }
            }
    
            private double axisMin;
    
            /// <summary>
            /// X轴最小
            /// </summary>
            public double AxisMin
            {
                get { return axisMin; }
                set
                {
                    axisMin = value;
                    RaisePropertyChanged(nameof(AxisMin));
                }
            }
    
            #endregion
    
            /// <summary>
            /// 模拟数据采集
            /// </summary>
            public void Read()
            {
                while (IsReading)
                {
                    Thread.Sleep(400);
                    var now = DateTime.Now;
                    double value = Math.Round(new Random().Next(10, 11) + (1 * new Random().NextDouble()), 2);
                    ChartValues.Add(new MeasureModel
                    {
                        DateTime = now,
                        Value = value
                    });
                    SetAxisLimits(now);
                    Curvalue = value + "℃";
                    // 只保留160个数据,满了就把前面的数据移除
                    if (ChartValues.Count > 160) ChartValues.RemoveAt(0);
                }
                IsReading = false;
            }
    
            /// <summary>
            /// 设置 X 轴上呈现的时间范围
            /// </summary>
            /// <param name="now"></param>
            private void SetAxisLimits(DateTime now)
            {
                // X轴显示区域的最大时间
                AxisMax = now.Ticks + TimeSpan.FromSeconds(1).Ticks;
                // X轴显示区域的最大时间
                AxisMin = now.Ticks - TimeSpan.FromSeconds(8).Ticks; 
            }
    
            /// <summary>
            /// 根据标识是否启动采集
            /// </summary>
            public void InjectStopOnClick()
            {
                IsReading = !IsReading;
                if (IsReading)
                {
                    Task.Factory.StartNew(Read);
                }
            }
    
        }
    }

    4.3数据绑定和界面完善

    <local:AnimationPageBaseView x:Class="Deamon.View.ChamberView"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:local="clr-namespace:Deamon.View"
          xmlns:vm="clr-namespace:Deamon.ViewModel"
          xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
          DataContext="{Binding ChamberVM, Source={ x:Static vm:ViewModelLocator.Locator}}"
          Title="ChamberView">
        <Grid Background="#FF033F42">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <StackPanel Orientation="Horizontal" Margin="10 0 0 0">
                <Button  VerticalAlignment="Center" 
                         Style="{StaticResource OnlyTextButton}" 
                         Command="{Binding ReadingCommand}" 
                         Content="{Binding ReadingCommandText}"/>
            </StackPanel>
            
            <DockPanel Grid.Row="1">
                <Grid Width="300" Height="200">
                    <Border CornerRadius="5" Background="White"/>
                    <Grid  Margin="5">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="60"/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <StackPanel Margin="5 0 0 0"  VerticalAlignment="Center">
                            <TextBlock Text="NO.607" FontSize="22" VerticalAlignment="Center" Foreground="#6C757D"/>
                            <TextBlock Text="Temperature:" FontSize="15"  Foreground="#6C757D"/>
                        </StackPanel>
                        <TextBlock Text="{Binding Curvalue}" Margin="10 5 0 0" Grid.Row="1" FontFamily="Consolas" FontSize="22" Foreground="#6C757D" FontWeight="Bold" />
                        <lvc:CartesianChart Grid.Row="1" AnimationsSpeed="0:0:0.2" Hoverable="False" DataTooltip="{x:Null}">
                            <lvc:CartesianChart.Series>
                                <lvc:LineSeries Values="{Binding ChartValues}" 
                                        PointGeometry="{x:Null}"
                                    LineSmoothness="0"
                                    StrokeThickness="3" 
                                    Stroke="#12B1AD"
                                    Fill="#E6F7F8"/>
                            </lvc:CartesianChart.Series>
                            <lvc:CartesianChart.AxisX>
                                <lvc:Axis LabelFormatter="{Binding DateTimeFormatter}" 
                              MaxValue="{Binding AxisMax}" 
                              MinValue="{Binding AxisMin}" ShowLabels="False"
                              Unit="{Binding AxisUnit}">
                                    <lvc:Axis.Separator>
                                        <lvc:Separator Step="{Binding AxisStep}" />
                                    </lvc:Axis.Separator>
                                </lvc:Axis>
                            </lvc:CartesianChart.AxisX>
                            <lvc:CartesianChart.AxisY>
                                <lvc:Axis ShowLabels="True"  />
                            </lvc:CartesianChart.AxisY>
                        </lvc:CartesianChart>
                    </Grid>
                </Grid>
                
            </DockPanel>
           
        </Grid>
    </local:AnimationPageBaseView>

     

    Over

    每次记录一小步...点点滴滴人生路...

    更多相关内容
  • 分数已被csdn修改,我也无法修改分数,过高无法下载请...WPF 数据可视化 大屏展示 实现地图仿echarts模拟迁移效果 Telerik图表 仪表盘 效果图https://blog.csdn.net/shishuwei111/article/details/79486365#comments
  • WPF 数据可视化 大屏展示 实现地图仿echarts模拟迁移效果 Telerik图表 仪表盘.rar
  • WPF-Diagram-Designer:WPF图表设计器源代码
  • RaftDemo - 用于可视化 raft 算法的 WPF 应用程序,需要分为两个项目。 #####需要做什么: 改进网络模型,使其可以正确模拟 tcp/ip 之类的消息传递, 找出actor系统的基本元素(ClientActor、ServerActor等...
  • “引言部分,总领全篇文章的中心内容。” WPF的DevExpress ChartControl是一种功能强大的可视化工具,可帮助您将数据显示为二维或伪三维条形图、区域、线和许多其他形...

     引言部分,总领全篇文章的中心内容。

       WPF的DevExpress ChartControl是一种功能强大的可视化工具,可帮助您将数据显示为二维或伪三维条形图、区域、线和许多其他形式。

    01

    将数据绑定到Chart Series

    Step 1. 创建新项目并添加图表

    • 创建一个新的WPF应用程序项目。将其命名为第1课BindCharttoData。

    • 将ChartControl组件从DX.21.2:数据和分析工具箱部分拖动到主窗口。

      d417789978920d4925550bdeff24898a.png

    • 右键单击图表控件并在关联菜单中选择Layout | Reset All 以使图表填充整个窗口。

      d7b6c3341551f75fa8b593565687818c.png

    新创建的图表包含一个空白的并排条形图和一个图例。主窗口的标记应如下所示:

    <Window
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Lesson1BindChartToData"
            xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" 
            x:Class="Lesson1BindChartToData.MainWindow"
            mc:Ignorable="d"
            Title="MainWindow" Height="315" Width="560">
        <Grid>
            <dxc:ChartControl>
                <dxc:ChartControl.Legends>
                    <dxc:Legend/>
                </dxc:ChartControl.Legends>
                <dxc:XYDiagram2D>
                    <dxc:BarSideBySideSeries2D DisplayName="Series 1"/>
                </dxc:XYDiagram2D>
            </dxc:ChartControl>
        </Grid>
    </Window>

    对以下库的引用将自动添加到项目中:

    • DevExpress.Data.v21.2

    • DevExpress.Xpf.Core.v21.2

    • DevExpress.Charts.v21.2.Core

    • DevExpress.Xpf.Charts.v21.2

    • DevExpress.Mvvm.v21.2

    • DevExpress.Xpf.Printing.v21.2

    • DevExpress.Printing.v21.2.Core

    注意:

    这些引用是从全局程序集缓存(GAC)中选择的。要在本地复制它们或在以后的产品安装中包含它们,请使用以下目录:

    C:\ProgramFiles(x86)\DevExpress 21.2\Components\Bin\Framework\

    Step 2. 准备数据模型

    您可以将图表绑定到数据库、XML文件或运行时创建的数据。数据源应该实现IEnumerable, IListSource 或者他们的后代。有关如何用数据填充图表的更多信息,请参阅提供数据部分。在本主题中,您将图表绑定到ObservableCollection<T>.

    使用DataPoint类实现开发数据模型:

    using System.Collections.ObjectModel;
    using System.Windows;
    
    
    namespace Lesson1BindChartToData {
        public class DataPoint {
            public string Argument { get; set; }
            public double Value { get; set; }
            public static ObservableCollection<DataPoint> GetDataPoints() {
                return new ObservableCollection<DataPoint> {
                        new DataPoint { Argument = "Asia", Value = 5.289D},
                        new DataPoint { Argument = "Australia", Value = 2.2727D},
                        new DataPoint { Argument = "Europe", Value = 3.7257D},
                        new DataPoint { Argument = "North America", Value = 4.1825D},
                        new DataPoint { Argument = "South America", Value = 2.1172D}
                       };
            }
        }
    }

    Step 3. 添加ViemModel

    使用以下代码实现MainWindowViewModel类:

    using System.Collections.ObjectModel;
    using System.Windows;
    
    
    namespace Lesson1BindChartToData {
        public class MainWindowViewModel {
            public ObservableCollection<DataPoint> Data { get; private set; }
            public MainWindowViewModel() {
                this.Data = DataPoint.GetDataPoints();
            }
        }
    }

    Step 4. 指定Data Context

    d3cfee96bcf28a05f08b16e7a2c67197.png

    Step 5. 绑定数据给图表

    单击图表控件的智能标记。指定ChartControl.DataSource属性,如下图所示:

    a3da1ef75ed82f08257e7726f8617492.png

    Step 6. 用数据填充序列

    指定应为系列点参数和值提供值的数据源字段。

    将序列的series.ArgumentDataMember属性设置为参数。

    7764609acffdc7d10685e8c92297661c.png

    将序列的series.ValueDataMember属性设置为Value。

    88da0e3d51978cfc8b3b80103d34c885.png

    Step 7. 自定义图表

    • 指定序列名称

    将Series.DisplayName属性设置为年度统计信息。显示名称标识图例中的系列。

    0216ee3589eaca96a2c340eb3e4e9675.png

    • 添加图表标题并自定义其位置

    单击图表控件标题属性的省略号按钮以调用标题集合编辑器。使用“添加”按钮创建新标题并将其添加到图表中。

    将TitleBase.HorizontalAlignment属性设置为“中心”。

    定义标题库。按地区销售的内容。单击“确定”。

    6f0accc980e3dfba1af09dc0952d3f43.png

    • 配置十字光标的选项

    要自定义十字线选项,请单击ChartControl.CrosshairOptions属性的“新建”按钮以创建十字线选项实例。

    启用以下属性:

    1. CrosshairOptions.ShowArgumentLabels

    2. CrosshairOptions.ShowValueLabels

    3. CrosshairOptionBase.ShowValueLine

    213846e5ce37b551a9c11295e82499c7.png

    将XYSeries2D.Crosshair LabelPattern设置为$V:f2}M。

    082ea397528b174cdf69f93ee2550c27.png

    02


    Results

    运行项目以查看结果。

    4ec4f0d1953f99da35bbffa2227dc96a.png

    生成的代码如下所示:

    <Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:local="clr-namespace:Lesson1BindChartToData" 
        xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts"
        xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" 
        x:Class="Lesson1BindChartToData.MainWindow"
        mc:Ignorable="d" Title="MainWindow" Height="400" Width="650">
        <Window.DataContext>
            <local:MainWindowViewModel/>
        </Window.DataContext>
        <Grid>
            <dxc:ChartControl DataSource="{Binding Data}">
                <dxc:ChartControl.CrosshairOptions>
                    <dxc:CrosshairOptions ShowArgumentLabels="True" 
                                          ShowValueLabels="True" 
                                          ShowValueLine="True"/>
                </dxc:ChartControl.CrosshairOptions>
                <dxc:ChartControl.Titles>
                    <dxc:Title Content="Sales by Regions" 
                               HorizontalAlignment="Center"/>
                </dxc:ChartControl.Titles>
                <dxc:ChartControl.Legends>
                    <dxc:Legend/>
                </dxc:ChartControl.Legends>
                <dxc:XYDiagram2D>
                    <dxc:BarSideBySideSeries2D DisplayName="Annual Statistics" 
                                               ArgumentDataMember="Argument" 
                                               ValueDataMember="Value" 
                                               CrosshairLabelPattern="${V:f2}M"/>
                </dxc:XYDiagram2D>
            </dxc:ChartControl>
        </Grid>
    </Window>

    C# CODE

    using System.Collections.ObjectModel;
    using System.Windows;
    namespace Lesson1BindChartToData {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window {
            public MainWindow() {
                InitializeComponent();
            }
        }
        public class MainWindowViewModel {
            public ObservableCollection<DataPoint> Data { get; private set; }
            public MainWindowViewModel() {
                this.Data = DataPoint.GetDataPoints();
            }
        }
        public class DataPoint {
            public string Argument { get; set; }
            public double Value { get; set; }
            public static ObservableCollection<DataPoint> GetDataPoints() {
                return new ObservableCollection<DataPoint> {
                        new DataPoint { Argument = "Asia", Value = 5.289D},
                        new DataPoint { Argument = "Australia", Value = 2.2727D},
                        new DataPoint { Argument = "Europe", Value = 3.7257D},
                        new DataPoint { Argument = "North America", Value = 4.1825D},
                        new DataPoint { Argument = "South America", Value = 2.1172D}
                       };
            }
        }
    }

    原文链接:https://docs.devexpress.com/WPF/9757/controls-and-libraries/charts-suite/chart-control/getting-started/lesson-1-bind-chart-series-to-data#results

    翻译小编:mm1552923

    公众号:dotNet编程大全

    展开全文
  • OxyPlot.Wpf 图表控件使用备忘

    千次阅读 2021-05-23 00:01:10
    OxyPlot.Wpf 图表控件使用备忘目录OxyPlot.Wpf 图表控件使用备忘一、OxyPlot.Wpf 控件信息二、基本概念(一) PlotView 和 Plot(二) PlotM...

    OxyPlot.Wpf 图表控件使用备忘

    目录

    OxyPlot.Wpf 图表控件使用备忘

    一、OxyPlot.Wpf 控件信息

    二、基本概念

    (一) PlotView 和 Plot

    (二) PlotModel

    (三) Axes

    (四) Series

    (五) Tracker

    三、样式设置

    (一) 效果对比

    (二) 图表边框和数据线条样式

    (三) 坐标轴样式

    (四) 自定义 Tracker

    四、装配和数据填充

    五、示例代码

    独立观察员 2021 年 5 月 21 日

    一、OxyPlot.Wpf 控件信息

    GitHub:https://github.com/oxyplot/oxyplot

    官方文档地址:https://oxyplot.readthedocs.io/en/latest/index.html

    使用版本:NuGet 版 2.0.0

    参考文章:《OxyPlot 在 wpf 中绘制实时动态曲线【更新 2.0 去掉 Smooth 属性】》

     

    二、基本概念

    (一) PlotView 和 Plot

    界面上有两种使用方法:

    (1)使用 PlotView(界面简单,设置都在代码中)

     

    (2)使用 Plot (坐标轴、线条等都在界面上设置)

     

    我们使用第一种方法。

     

    (二) PlotModel

    PlotView 的 Model 属性需绑定一个 PlotModel 对象,它包含了整个图表的各种信息,比如边框、数据线条、坐标轴、图示 等。

     

    绑定的属性可按如下定义:

     

    (三) Axes

    Axes 就是坐标轴集合,可分别添加四个方向的坐标轴,如果没有自行添加,默认会有一个底部的横坐标和一个左侧的纵坐标。

    坐标轴也有好几种类型:

     

    本文使用的是 LinearAxis:

     

    (四) Series

    Series 代表了一组数据,有很多种类型:

     

    本文以 线条(LineSeries)为例:

     

    注释部分是指定平滑模式,开启平滑模式后,两点之间以曲线相连,性能会降低;

    关闭平滑模式,两点之间以直线相连,也就是形成折线图。

     

    (五) Tracker

    Tracker 指的是可浮现的线条上点的信息框,可以理解为 ToolTip 。Tracker 是属于 Series 的。

    默认是按住鼠标左键,然后移动到点上,显示 Tracker 。

    可使用如下代码改为鼠标移上就显示(其中 _PlotView 为 PlotView 控件对象):

     

    三、样式设置

    (一) 效果对比

    默认样式如下(不包括标题和坐标轴标题):

     

    Tracker 默认样式如下:

     

    可通过设置,改为如下样式:

     

    (二) 图表边框和数据线条样式

     

    图表边框四边的宽度可分别设置,某一边的边框设为 0 时,相应的坐标轴线样式才有效果。不过坐标轴线条好像有点 Bug,所以此处还是使用边框线来替代坐标轴线。

     

    (三) 坐标轴样式

     

    分别设置左侧和底部的坐标轴,可进行缩放、平移、刻度线、网格线的开关和设置等。

     

    (四) 自定义 Tracker

    自定义 Tracker 在界面上设置,通过设置 Tracker 的控件模板来完成:

     

    更多样式可参考该控件库的示例代码:

     

    四、装配和数据填充

    样式设置完成后,将坐标轴和线条装入 PlotModel 中:

     

    数据填充到线条的 Points 中,ResetAllAxes () 方法可重置坐标轴,InvalidatePlot () 方法刷新数据:

     

    五、示例代码

    代码地址:https://gitee.com/dlgcy/DLGCY_OxyPlotTester

    发行版下载:https://gitee.com/dlgcy/DLGCY_OxyPlotTester/releases

    说明:该项目使用 WPFTemplate 搭建,如果要克隆代码,注意需进行 Git 子模块拉取操作。

    程序界面:

    WPF

    【翻译】WPF 中附加行为的介绍 Introduction to Attached Behaviors in WPF

    WPF 使用 Expression Design 画图导出及使用 Path 画图

    WPF MVVM 弹框之等待框

    解决 WPF 绑定集合后数据变动界面却不更新的问题(使用 ObservableCollection)

    WPF 消息框 TextBox 绑定新数据时让光标和滚动条跳到最下面

    真・WPF 按钮拖动和调整大小

    WPF MVVM 模式下的弹窗

    WPF 让一组 Button 实现 RadioButton 的当前样式效果

    WPF 原生绑定和命令功能使用指南

    WPF 用户控件的自定义依赖属性在 MVVM 模式下的使用备忘

    在WPF的MVVM模式中使用OCX组件

    展开全文
  • 数据可视化

    多点连线

    /// <summary>
    /// 将若干个数据点用线连接的图层
    /// 1)无抽点算法,所有的点都会被绘制
    /// 2)可以绘制多条数据曲线
    /// 3)多条数据曲线的长度可以不同
    /// </summary>
    public class PointDataLayer : BaseLayer2D


    连续数据

    /// <summary>
    /// 将相邻两点以直线连接的方式表达连续数据的图表
    /// * 连续数据的长度如果很长,将分段抽取最大最小值的办法予以表现
    /// * 可以显示多条长度相同的连续数据
    /// </summary>
    public class SerialDataLayer : BaseLayer2D


    实时波形

    /// <summary>
    /// * 最新(进入队列)数据显示在视图右侧
    /// * 无数据压缩(视图将绘制所有数据)
    /// * 不能显示多组数据
    /// </summary>
    public class RealTimeDataLayer : BaseLayer2D


    三维视图

    /// <summary>
    /// 功能(数据)3D可视化视图的基类,基于Viewport3D
    /// </summary>
    public class BaseLayer3D : Viewport3D, IFeatureLayer



    视图叠加




    视频视图

    	/// <summary>
    	/// 将通过AForge获取的实时视频图像(GDI的Bitmap对象)在一个Image控件实时更新和显示
    	/// </summary>
    	public class VideoLayer_WPF : VideoLayer
    	/// <summary>
    	/// 将通过AForge获取的实时视频图像(GDI的Bitmap对象)在一个PictureBox控件实时更新和显示
    	/// </summary>
    	public class VideoLayer_WinForm : VideoLayer



    MORE...

    展开全文
  • 先刨个坑,这是在做wpf一个可视化软件时查得一些资料。   https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/graphics-multimedia/animation-overview 1、WPF Page之间跳转时传参:...
  • 是一款强大的数据可视化控件,提供多种功能的图表和仪表,支持图表和仪表实时显示和更新,可以用于Silverlight和WPF平台下,支持 .Net 3.5 SP1以及4.0.利用该控件开发人员可以在几分钟内就设计出强大的图表应用程序...
  • grafana 可视化

    2022-05-12 10:43:45
    grafana是一款开源的、基于web的可视化工具 展示方式:客户端图表、面板插件 数据源可以来自于各种源,如prometheus 安装grafana,并启动服务 [root@prometheus ~]# cd prometheus_soft/ [root@prometheus ...
  • WPF调用 ECharts 显示图表

    千次阅读 2018-09-04 20:58:21
    ECharts:来自百度 ,一个使用 JavaScript 实现的免费开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库ZRender,...
  • ChartPlotter 是 DSTK 3 的一部分,网址为:https://sourceforge.net/projects/dstk3/?source=directory DSTK Engine 在那里是开源... Chart Plotter 有助于与 Plotly JS 交互,并通过点击鼠标生成和创建图表和仪表板。
  • 涉及数据可视化就非常的累赘了,当然大神也一定有,只不过面向大多数人,还是通过网页来实现,有的时候不想把这两个功能分开,一般会是客户的原因,所以我们打算在WPF中嵌入WebBrowser,然后使用ECharts 完成复杂的...
  • LightningChart.NET是一个与 WinForms、UWP 和 WPF 兼容的数据可视化组件(图表库)。经过深入开发,可以满足要求苛刻的应用程序开发人员和最终用户的最高性能要求。 重大突破 几年前,LightningChart .NET打破了...
  • 从源代码添加类型或整个层次结构到图表可视化它们之间的关系。 使用该图发现相关类型。 快速浏览 从图中跳转到相关的源代码段。 带有图表的文档 将图表复制/粘贴到文档中。 新闻 此工具的下一版本将不再免费。 ...
  • ViewXY视图可以通过Cartesian坐标系、XY图表格式,展现出各种的点线系列、区域系列、高低系列、强度系列、热图系列、条棒系列、带、线系列光标等。系列 会关联到X和Y轴,使用指定的轴的值域范围。 ViewXY对象树 ...
  • LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学,工程,医学,航空,贸易,能源和其他领域的体绘制功能。 XY图表 XY图表(ViewXY)允许以不同方式和格式显示二...
  • C# 之 WPF 统计图表开发方案

    千次阅读 2019-04-17 14:59:00
    C# 之 WPF 统计图表开发文档一、前言二、环境配置1...LiveCharts, 官网:https://lvcharts.net 是一款简单,灵活,交互式和强大的 DOTNET数据可视化图表控件,内置多种统计图表,可满足本项目的需求。 二、环境配置...
  • 使用各种 WPF Chart图表控件、插件的经历回顾与总结  --不愿透露姓名的客户提...
  • LightningChart Ultimate SDK是Arction Ltd公司开发的.NET和Windows 2D和3D测量、管理和研发数据可视化SDK。它是一个能全面实现GPU加速(Direct3D)和性能优化的数据控件,大规模数据都可以通过它以二维XY图表、三维...
  • 微软即将发布Windows 11,将是取代其主流桌面操作系统...出于这个原因,LightningChart® 团队决定在Windows 11正式发布之前(进一步在2022年初)进一步测试Arction用于.NET的主要 LightningChart® 数据可视化高.
  • Arction的LightningChart图表控件在外汇和外汇衍生品交易中的应用。 FXVolQuant作为外汇交易商的前沿数据驱动平台,由kuma.capital开发和维护,是外汇和外汇衍生品交易商的数据驱动洞察,分析和战略警报平台。 ...
  • 这其中包括有四类演示应用程序,各自对应不同的图表版本(WinForms、WPF 无绑定、WPF 部分绑定和WPF 全绑定,关于图表版本更多信息,请参阅《LightningChart数据可视化图形控件教程1-安装教程》...
  • Lightningchart的 LiDAR 方法属于复杂级别的数据可视化,它广泛用于对精度要求苛刻的行业,例如地形或地图绘制的 3D 数据。但激光雷达的使用更加的广泛,因为它还可以用于车辆自动控制和空间探索的导航监控。
  • LightningChart.NET完全由...3D图表(View3D)可视化3D空间中的数据。3D模型可以通过各种方式缩放,旋转和照亮。可以将不同的系列类型放置到同一3D视图中以进行组合的可视化。 下图显示了显示墙和轴的基本3D图。 Point
  • LightningChart®Trader图表库简单易用,用于构建交易和金融应用程序。 可以将TradingChart控件直接放置到应用程序UI中,它提供了简单明了的API,特别是为技术分析而设计。 Trader图表具有多种内置功能,例如颜色...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,606
精华内容 642
关键字:

wpf图表可视化