标签: livecharts

LiveCharts的基础知识 - 如何画线?

我很难理解LiveCharts究竟应该发生什么.我在这里有一块XAML:

<Grid>
    <Grid.Background>
        <ImageBrush ImageSource="/CPF;component/Images/background-top-cropped2.png" Stretch="None"></ImageBrush>
    </Grid.Background>
    <lvc:CartesianChart Series="{Binding myData}" LegendLocation="Right" x:Name="myChart">
        <lvc:CartesianChart.AxisY>
            <lvc:Axis Title="Sales" LabelFormatter="{Binding YFormatter}"></lvc:Axis>
        </lvc:CartesianChart.AxisY>
        <lvc:CartesianChart.AxisX>
            <lvc:Axis Title="Month" Labels="{Binding Labels}"></lvc:Axis>
        </lvc:CartesianChart.AxisX>
    </lvc:CartesianChart>
</Grid>
Run Code Online (Sandbox Code Playgroud)

和代码在这里:

public MainWindow()
{
    InitializeComponent();
    DrawGraphs();
}
public void DrawGraphs()
{
    LineSeries mySeries = new LineSeries
    {
        Values = new ChartValues<int> { 12, 23, 55, 1 }
    };

    myChart.Series.Add(mySeries);
}
Run Code Online (Sandbox Code Playgroud)

在运行时,'myChart.Series.Add(mySeries)'会抛出Null Reference Exception错误.我不确定如何解决这个问题?

.net c# wpf xaml livecharts

8
推荐指数
1
解决办法
1665
查看次数

MVVM模式中自定义元素的自定义事件绑定

我正在尝试使用 MVVM 模式绑定 LiveChart 的笛卡尔图表元素的“DataClick”事件。

我的 Charts.xml 是这样的:

<ContentControl Grid.Row="0">
        <lvc:CartesianChart x:Name="ContrastChart" Series="{Binding ContrastSeriesCollection}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="DataClick">
                    <i:InvokeCommandAction Command="{Binding ChartDataClick}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </lvc:CartesianChart>
    </ContentControl>
Run Code Online (Sandbox Code Playgroud)

这是我的 ViewModel 上的 ICommand ChartDataClick:

        public ICommand ChartDataClick {
        get
        {
            if(_dataClickCommand == null)
            {
                _dataClickCommand = new DelegateCommand( 
                    () => 
                    {
                        MessageBox.Show("Data Clicked!");
                    } 
                    );
            }

            return _dataClickCommand;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我将“DataClick”切换为“MouseEnter”,我的命令就会被触发。

所以我假设问题是 DataClick 是自定义事件。

有人知道这个问题的解决方法吗?我真的尝试了在谷歌上能找到的所有有帮助的东西,但到目前为止什么也没有......

LiveCharts 事件:事件文档

c# wpf prism mvvm livecharts

5
推荐指数
1
解决办法
1956
查看次数

如何正确更新图表值?(实时)

我最近遇到了一个名为LiveChart的工具,并决定对其进行测试.

不幸的是,我一直在弄清楚如何实时更新图表值.我很确定这是一个干净而正确的方法,但我无法找到它.

我希望能够通过private void或按钮更新值.

在我的代码中,我正在用ToolStripMenu测试它.

[码]:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using LiveCharts;
using LiveCharts.WinForms;
using LiveCharts.Wpf;
using PokeShowdown_AccStats_T.Properties;
using LiveCharts.Defaults;

namespace PokeShowdown_AccStats_T
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //int val1 = int.Parse(Settings.Default.Value1);

            var value1 = new ObservableValue(3);
            var value2 = new ObservableValue(7);
            var value3 = new ObservableValue(10);
            var value4 = new ObservableValue(2);

            //value1.Value = 5;

            cartesianChart1.Series.Add(new LineSeries 
            { …
Run Code Online (Sandbox Code Playgroud)

.net c# charts winforms livecharts

5
推荐指数
1
解决办法
5673
查看次数

基本的WPF LiveCharts DateTime示例不起作用

我已尽可能严格地遵循Live Charts TimeDate基本示例,但似乎无法正确显示X轴。

https://lvcharts.net/App/examples/v1/wpf/Date%20Time

我的MainWindow代码

public partial class MainWindow : Window
{
    public Func<double, string> Formatter { get; set; }

    public MainWindow()
    {
        InitializeComponent();

        var dayConfig = Mappers.Xy<DateModel>()
          .X(dateModel => dateModel.DateTime.Ticks / TimeSpan.FromDays(1).Ticks)
          .Y(dateModel => dateModel.Value);

        SeriesCollection Series = new SeriesCollection(dayConfig)
        {
            new LineSeries
            {
                Title = "Google Rank",

                Values = new ChartValues<DateModel>
                {
                    new Wpf.CartesianChart.Using_DateTime.DateModel
                    {
                        DateTime    = System.DateTime.UtcNow,
                        Value       = 5
                    },
                    new Wpf.CartesianChart.Using_DateTime.DateModel
                    {
                        DateTime    = System.DateTime.UtcNow.AddDays(1),
                        Value       = 9
                    },
                    new Wpf.CartesianChart.Using_DateTime.DateModel
                    {
                        DateTime    = System.DateTime.UtcNow.AddDays(2), …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml data-visualization livecharts

5
推荐指数
1
解决办法
5062
查看次数

LiveCharts WPF 渲染性能差

我正在构建一个 WPF 工具,用于可视化冷藏集装箱(冷却集装箱)的数据。非常简单的传感器数据图(温度、设定点、湿度)。
问题是渲染性能。数据通过 REST API 加载速度极快。将值重新格式化为 DateTimePoints(需要 1 毫秒)后,它们将设置为绑定 SeriesCollection 上的齿轮值。设置完这些值后,应用程序立即冻结 10 秒,使图表断断续续地呈现,整个应用程序不再可用。我完成了所有示例和演示,但我无法让 LiveCharts 以可用的方式执行,我不知道我在这里做错了什么

CartesianChart
3x GStepLineSeries 具有(在这种情况下)每系列 626 个值
XAxisFormatter DateTimePoint

我不知道我做错了什么。1900 GearedValues 值是否过多?LiveCharts 有那么糟糕吗?

CartesianChart GStepLineSeries 在此处输入图片说明

 public GStepLineSeries SupplyTemperatures
    {
        get { return _supplyTemperatures ?? (_supplyTemperatures = new GStepLineSeries() { Title = "Supply" }); }
        set
        {
            _supplyTemperatures = value;
            RaisePropertyChanged();
        }
    }

    public GStepLineSeries ReturnTemperatures
    {
        get { return _returnTemperatures ?? (_returnTemperatures = new GStepLineSeries { Title = "Return" }); }
        set
        {
            _returnTemperatures = value;
            RaisePropertyChanged(); …
Run Code Online (Sandbox Code Playgroud)

wpf livecharts

5
推荐指数
1
解决办法
4843
查看次数

如何使用实时图表在条形图中的每一列上都有标签

使用 LiveCharts( https://lvcharts.net/ ) 和 C# 我想要一个条形图,其中每列在 x 轴上都有一个标签。然而,我只在每隔一列上得到一个标签。标签以数据形式存在,当我将鼠标悬停在列上时,我可以在弹出窗口中看到它们。

我尝试过摆弄轴上的各种标签属性以及标签格式化程序,但我只在每隔一列上得到一个标签。

我的图表的 XAML 实现:

<lvc:CartesianChart Name="CartesianChart" Series="{Binding Series}" MinHeight="400" MinWidth="800" >

    <lvc:CartesianChart.AxisX>
        <lvc:Axis MinValue="0" Labels="{Binding XAxisLabels}" ShowLabels="True" LabelsRotation="50">
            <lvc:Axis.Separator>
                <lvc:Separator Stroke="{Binding AxisStrokeColor}">/lvc:Separator>
            </lvc:Axis.Separator>
        </lvc:Axis>
    </lvc:CartesianChart.AxisX>

    <lvc:CartesianChart.AxisY>
        <lvc:Axis MinValue="0"   MaxValue="10" LabelFormatter="{Binding LabelFormatter}">
            <lvc:Axis.Separator>
                <lvc:Separator Stroke="{Binding AxisStrokeColor}">/lvc:Separator>
            </lvc:Axis.Separator>
        </lvc:Axis>
    </lvc:CartesianChart.AxisY>
</lvc:CartesianChart>
Run Code Online (Sandbox Code Playgroud)

我用于实例化图表的代码:

public partial class Chart : UserControl
{
    public SolidColorBrush AxisStrokeColor { get; set; }
    public SeriesCollection Series { get; set; }
    public string[] XAxisLabels { get; set; }
    public Func<double, string> …
Run Code Online (Sandbox Code Playgroud)

c# livecharts

5
推荐指数
1
解决办法
1679
查看次数

LiveCharts WPF 实时数据慢。提高 LiveCharts 实时绘图性能

我正在研究在 WPF 应用程序中使用 LiveChart 以实时绘制温度测量值。我整理了一个简单的折线图示例,以 10Hz 读取数据,并为每个样本重新绘制。但是,我发现重绘率约为 1Hz。对于 WPF 实时图表工具来说,这似乎很慢。我的 xaml 如下:

<lvc:CartesianChart x:Name="TemperatureChart" Grid.Row="1" LegendLocation="Right" Hoverable="False" DataTooltip="{x:Null}">
    <lvc:CartesianChart.Series>
        <lvc:LineSeries x:Name="TempDataSeries" Values="{Binding TemperatureData}"></lvc:LineSeries>
    </lvc:CartesianChart.Series>
</lvc:CartesianChart>
Run Code Online (Sandbox Code Playgroud)

我的视图模型中的片段如下:

ChartValues<ObservableValue> _temperatureData = new ChartValues<ObservableValue>();

public ChartValues<ObservableValue> TemperatureData
{
    get => this._temperatureData;
    set => this._temperatureData = value;
}

void Initialise()
{
    _temperatureMonitor.Subscribe(ProcessTemperatures);
}

void TestStart()
{
    _temperatureMonitor.Start();
}
void TestStop()
{
    _temperatureMonitor.Stop();
}
void ProcessTemperatures(TemperatureData data)
{
    TemperatureData.Add(data.Temperature);
}
Run Code Online (Sandbox Code Playgroud)

我没有处理大量数据,并且测试了 100 个值的限制。我相信我的线程读取数据的开销很小,但是重绘一次大约绘制 10 个点。

我是否正确实施了绑定?我是否需要添加属性通知来强制更新?我的理解是这是由 ChartValues 处理的。

谢谢。

更新。Oxyplot 通过绑定到 DataPoints 的 ObservableCollection 产生了如下所示的所需结果。使用 …

c# wpf performance redraw livecharts

5
推荐指数
1
解决办法
3240
查看次数

直到我抓住并移动窗口后,窗口才完全绘制

我最近向 WinForm 添加了一些图表,并使用实时数据进行更新。我的表单加载喜欢这样:

private void MyForm_Load (object sender, EventArgs e){
...bunch of code
//Waveforms
InitializeChartEKG();
InitializeSpO2WaveformChart();
InitializeEtCO2WaveformChart();
FillWaveformCharts();
}
Run Code Online (Sandbox Code Playgroud)

实时图表的创建方式如下:

public async void FillWaveformCharts() {
     waveformData = AnesthWaveformDatas.CreateWaveformObjects(anestheticRecordNum);
     Action action = () =>
     FillChartEKG(waveformData);
     Invoke(action);
     action = () =>
     FillChartSpO2(waveformData);
     Invoke(action);
     action = () =>
     FillChartEtCO2(waveformData);
     Invoke(action3);
}
Run Code Online (Sandbox Code Playgroud)

然后,在每个 FillChart 方法中,我更新 UI,以便表单不会冻结:

public async void FillChartEKG (List<AnesthWaveformData> waveformData) {
 for (i = 0; i < waveformData.Count; i++){
   ...bunch of code that takes a long time to run...
  UpdateUI(); //updates UI …
Run Code Online (Sandbox Code Playgroud)

c# paint winforms livecharts

5
推荐指数
1
解决办法
183
查看次数

如何设置实时图表的标签颜色?

我有一个基于 materialdesigninxaml 框架的应用程序,我可以在其中设置浅色和深色,设置浅色后我可以正确看到黑色的标签文本,但是当我设置深色主题时,图表的标签仍然保留黑色,所以我什么也看不见。这是我的图表:

 <lvc:CartesianChart Series="{Binding}" LegendLocation="Bottom">
       <lvc:CartesianChart.AxisY>
           <lvc:Axis Labels="{Binding AnalysisController.Labels}"/>
       </lvc:CartesianChart.AxisY>
 </lvc:CartesianChart>
Run Code Online (Sandbox Code Playgroud)

我尝试按照文档的建议将其添加到我的 App.xaml 中:

<ResourceDictionary Source="pack://application:,,,/LiveCharts.Wpf;component/Themes/Colors/white.xaml" />
Run Code Online (Sandbox Code Playgroud)

但文字的颜色仍然是黑色

wpf xaml material-design-in-xaml livecharts

4
推荐指数
1
解决办法
3667
查看次数

如何使实时图表数据工具提示仅显示当前悬停?

我有一个在 winform 中使用实时图表的饼图,并且我尝试使用文档中的代码工具提示更改为当前悬停:

pieChart1.DataTooltip.SelectionMode = LiveCharts.TooltipSelectionMode.OnlySender;
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误: 严重性代码 描述 项目文件行抑制状态

'UserControl' does not contain a definition for 'SelectionMode' and no accessible extension method 'SelectionMode' accepting a first argument of type 'UserControl' could be found (are you missing a using directive or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)

我不确定我错过了什么?下面的代码是我用来绘制饼图的代码。

Func<ChartPoint, string> labelPoint = chartPoint =>
            string.Format("${0:n}", chartPoint.Y, chartPoint.Participation);

        SeriesCollection series = new SeriesCollection();
        //reads in a data table and creates a pie series for each data row
        foreach (DataRow dr in dt.Rows) …
Run Code Online (Sandbox Code Playgroud)

c# winforms livecharts

4
推荐指数
1
解决办法
4172
查看次数