我正在创建一个程序来从文件中收集数据,对其进行分析,并在条形图中显示数据。我正在使用WPF,因此我从NuGet中获取了WPFToolkit和WPFToolkit.DataVisualization。使用一组非常基本的XAML,图表看起来很好,但是它的轴是交换的 - 它给了我一个水平条形图,我想要列。所以我尝试交换轴,并得到以下错误:
不能使用指定的独立轴。这可能是由于轴的未设置Orientation属性造成的。
这是我的代码,从我最终绑定到的集合中的项目定义开始:
时间间隔摘要
public class IntervalSummary
{
public IntervalSummary()
{
Results = new List<PollResult>();
}
public DateTime PeriodStart { get; set; }
public DateTime PeriodEnd { get; set; }
public int MinimumItemCount { get; set; }
public int MaximumItemCount { get; set; }
public int AverageItemCount { get; set; }
public List<PollResult> Results { get; set; }
}
ViewModel中的属性
请注意,我在这里使用Caliburn.Micro,因此Set()
方法基本上处理将值设置为支持字段以及属性更改通知。
public ObservableCollection<IntervalSummary> DataItems
{
get { return _dataItems; }
set { Set(ref _dataItems, value); }
}
图表XAML
在View - Buttons,GroupPanels,TextBoxes等中有一大堆不相关的XAML(与这个问题无关) - 我已经测试过并且有效。因此,为了简洁起见,这只是Window定义(因此您可以看到XML名称空间声明)和图表声明。
<Window x:Class="QueueMonitorAnalyzer.Views.ShellView"
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:QueueMonitorAnalyzer.Views"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:toolkitEx="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
mc:Ignorable="d">
<Border Padding="5">
<Grid>
<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
<datavis:Chart.Series>
<datavis:BarSeries Name="BarSeries" Title="Items (Avg.)"
ItemsSource="{Binding Path=DataItems}"
DependentValueBinding="{Binding Path=AverageItemCount}"
IndependentValueBinding="{Binding Path=PeriodStart}">
<datavis:BarSeries.DependentRangeAxis>
<datavis:LinearAxis Orientation="Y" Title="Item Count"/>
</datavis:BarSeries.DependentRangeAxis>
<datavis:BarSeries.IndependentAxis>
<datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/>
</datavis:BarSeries.IndependentAxis>
</datavis:BarSeries>
</datavis:Chart.Series>
</datavis:Chart>
</Grid>
</Border>
</Window>
在一天结束时,这里的目标只是拥有一个柱形图。如果我遗漏了<datavis:BarSeries.DependentRangeAxis>
和<datavis:BarSeries.IndependentAxis>
,我会得到一个水平图表,所以我只是将它们放在那里,试图交换轴并使图表朝着我喜欢的方向。< / p>
我尝试了很多东西,包括使用不同的轴类型(LinearAxis
,DateTimeAxis
,CategoryAxis
)。我也试过转储IndependentAxis
定义(仅留下DependentRangeAxis
),但这给了我以下错误:
不能使用指定的从属轴。这可能是由于轴的未设置Orientation属性或绘制的值与轴支持的值之间的类型不匹配。
基于此,我继续尝试将IntervalSummary.AverageItemCount
数据类型更改为double
或float
,这也让我无处可去。
有谁能看到我在这里做错了什么?
最后,早些时候我说过一组基本的XAML正确生成图表,但方向不正确。这是XAML的基本集:
<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
<datavis:Chart.Series>
<datavis:BarSeries Name="BarSeries" Title="Items (Avg.)"
ItemsSource="{Binding Path=DataItems}"
DependentValueBinding="{Binding Path=AverageItemCount}"
IndependentValueBinding="{Binding Path=PeriodStart}">
</datavis:BarSeries>
</datavis:Chart.Series>
</datavis:Chart>
答案 0 :(得分:1)
如果要显示列,则应使用ColumnSeries
:
<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
<datavis:Chart.Series>
<datavis:ColumnSeries Name="BarSeries" Title="Items (Avg.)"
ItemsSource="{Binding DataItems}"
DependentValuePath="AverageItemCount"
IndependentValuePath="PeriodStart">
<datavis:ColumnSeries.DependentRangeAxis>
<datavis:LinearAxis Orientation="Y" Title="Item Count"/>
</datavis:BarSeries.DependentRangeAxis>
<datavis:ColumnSeries.IndependentAxis>
<datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/>
</datavis:BarSeries.IndependentAxis>
</datavis:ColumnSeries>
</datavis:Chart.Series>
</datavis:Chart>
有关详细信息,请参阅以下文章:https://www.codeproject.com/Articles/196502/WPF-Toolkit-Charting-Controls-Line-Bar-Area-Pie-Co