我使用LiveCharts
和WPF
绘制了一系列折线图,其中折线图的内容和数量在运行时确定。所以我事先不知道会有多少LineSeries
,它们的值是多少。但是,我知道每个LineSeries
的good范围。例如,一个系列,我们称它为S1
的good范围为2 +/- 1。因此,介于1和3之间的任何值都被认为是好的。同样,可以存在另一个范围,例如S2
,范围为30 +/- 2,因此28到32之间的任何值都很好。
我想画线形图,以便将范围内的部分绘制为实线,但是,如果部分超出范围,则它将是点划线。由于我有多个LineSeries
,因此我在各自的Y轴上作了画。我的XAML
和代码如下:
<Grid>
<lvc:CartesianChart Name="MyChart" Margin="4"
Series="{Binding SeriesCollection}"/>
</Grid>
后面的代码:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public SeriesCollection SeriesCollection { get; set; }
public MainWindow()
{
InitializeComponent();
PlotGraph();
}
private void PlotGraph()
{
SeriesCollection = new SeriesCollection();
var lineSeries1 = new LineSeries
{
Title = "S1",
Values = new ChartValues<double>() { 2.3, 2.0, 3.1, 1.3, 0.5, 3.8, 7.3, 2.4, 1.2, 0.1 },
DataLabels = true,
Stroke = Brushes.Green,
Fill = Brushes.Transparent,
ScalesYAt = 0
};
var lineSeries2 = new LineSeries
{
Title = "S2",
Values = new ChartValues<double>() { 32.5, 34.5, 29.5, 26.0, 25.8, 30.5, 32.1, 36.5, 32.4, 24.5 },
DataLabels = true,
Stroke = Brushes.HotPink,
Fill = Brushes.Transparent,
ScalesYAt = 1
};
SeriesCollection.Add(lineSeries1);
SeriesCollection.Add(lineSeries2);
MyChart.AxisY.Add(new Axis());
MyChart.AxisY.Add(new Axis());
DataContext = this;
}
}
I found an example here,PointState
是根据值着色的,但是它对我不起作用,因为我在一个中绘制了多个序列。另外,我的图形有数千个点,因此我禁用了PointGeometry
,因为如果启用它们,无论如何它们都很难看到。
我到底想要什么?
您不能将一个样式的样式混合在一起。
您都可以使用Livechart中的AxisSection
剪切LineSerie细分,然后检查细分中是否包含最小/最大值,并绘制实线或虚线。
需要将某些值引出极点,但是在实时图表中不包括外推。