我很难理解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错误.我不确定如何解决这个问题?
我正在尝试使用 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 事件:事件文档
我最近遇到了一个名为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) 我已尽可能严格地遵循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) 我正在构建一个 WPF 工具,用于可视化冷藏集装箱(冷却集装箱)的数据。非常简单的传感器数据图(温度、设定点、湿度)。
问题是渲染性能。数据通过 REST API 加载速度极快。将值重新格式化为 DateTimePoints(需要 1 毫秒)后,它们将设置为绑定 SeriesCollection 上的齿轮值。设置完这些值后,应用程序立即冻结 10 秒,使图表断断续续地呈现,整个应用程序不再可用。我完成了所有示例和演示,但我无法让 LiveCharts 以可用的方式执行,我不知道我在这里做错了什么
CartesianChart
3x GStepLineSeries 具有(在这种情况下)每系列 626 个值
XAxisFormatter DateTimePoint
我不知道我做错了什么。1900 GearedValues 值是否过多?LiveCharts 有那么糟糕吗?
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) 使用 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) 我正在研究在 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 产生了如下所示的所需结果。使用 …
我最近向 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) 我有一个基于 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)
但文字的颜色仍然是黑色
我有一个在 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)