XamDataChart 绘图颜色和标记选项

Posted

技术标签:

【中文标题】XamDataChart 绘图颜色和标记选项【英文标题】:XamDataChart plotting colors and marker options 【发布时间】:2012-11-06 07:06:05 【问题描述】:

我正在使用 WPF 和 c# 测试来自 Infragistics 的最新 XamDataChart。有人知道如何更改折线图上绘制的数据点之间的线条颜色吗?

我还想仅在一些标绘点上放置标记。我可以使用 MarkerType=”None” 打开和关闭整个系列的标记,但还没有找到一种方法来标记基于数据绑定到布尔值的某些数据点,该布尔值也可作为用于绘图的集合的一部分.

这似乎是相当基本的东西,但到目前为止我不知所措。

任何想法或建议将不胜感激。


我已经尝试了我能想到的一切来让它工作,但没有任何乐趣。

在下面的代码中,我试图在不丢失问题本质的情况下尽可能地简化。它看起来相当简单,除了 MarkerType 数据绑定之外一切正常。我已将错误的类型从 bool 更改为 MarkerType。我在 AbcDataSources 集合中有大量 AbcData 对象。数据上下文设置在网格上。 LineSeries 的数据正常,图表显示线条。

奇怪的是,我已将所有错误属性设置为枚举 MarkerType.Circle 类型,并且在 Xaml 设计器中显示了圆圈。当程序运行时,它们不会。

其他信息:我正在使用 VS2012、.NET 4.5、Infragistics WPF 2012 V2

再次感谢任何有助于理解这一点的帮助。

public class AbcData : BindableBase

    private Single _dataValue;
    private MarkerType _error;

    public Single DataValue
    
        get  return _dataValue; 
        set  SetProperty(ref _dataValue, value); 
    

    public MarkerType Error
    
        get  return _error; 
        set  SetProperty(ref _error, value); 
    


public class AbcDataSource

    private readonly ObservableCollection<AbcData> _rawMDP = new ObservableCollection<AbcData>();

    public ObservableCollection<AbcData> RawMDP
    
        get  return _rawMDP; 
    


<Grid>
    <Grid.DataContext>
    <Data:AbcDataSource/>
    </Grid.DataContext>

    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="16" />
    </Grid.RowDefinitions>

    <ig:XamDataChart x:Name="RTChart" Grid.Row="0" HorizontalZoomable="True" WindowScaleHorizontal="0.25"
            WindowPositionHorizontal="1" HorizontalZoombarVisibility="Visible" VerticalZoomable="True"
            VerticalZoombarVisibility="Visible" PlotAreaBackground="Black" CrosshairVisibility="Visible" Background="Black">

        <ig:XamDataChart.Axes>
            <ig:NumericYAxis x:Name="YAxis" Interval="1" Label=":n2" >
                <ig:NumericYAxis.LabelSettings>
                    <ig:AxisLabelSettings Location="OutsideRight" Foreground="White" FontSize="10"
                            Extent="45" />
                </ig:NumericYAxis.LabelSettings>
            </ig:NumericYAxis>
            <ig:CategoryXAxis x:Name="XAxis" Label="XDateTime:HH:mm" ItemsSource="Binding RawMDP" >
                <ig:CategoryXAxis.LabelSettings>
                    <ig:AxisLabelSettings Foreground="White" FontSize="10" />
                </ig:CategoryXAxis.LabelSettings>
            </ig:CategoryXAxis>
        </ig:XamDataChart.Axes>

        <ig:XamDataChart.Series>

            <ig:LineSeries x:Name="DataValue"
                                MarkerType="Binding RawMDP/Error"
                                XAxis="Binding ElementName=XAxis"
                                YAxis="Binding ElementName=YAxis"
                                ItemsSource="Binding Path=RawMDP"
                                ValueMemberPath="DataValue" />

        </ig:XamDataChart.Series>

    </ig:XamDataChart>

</Grid>

【问题讨论】:

【参考方案1】:

您可以通过指定自定义标记模板使标记的可见性取决于关联的数据。如果在系列的 MarkerTemplate 属性上设置 DataTemplate,则可以通过数据上下文中的“项目”引用基础项目上的值。例如,如果您想将椭圆的可见性绑定到底层数据项的可见性属性,它可能看起来像这样:

Visibility="Binding Item.Visibility"

如果您的数据项上有一个名为 Visibility 的属性,类型为 Visibility。

就让线在点之间改变颜色而言,线系列专门设计为不做这样的事情,因为如果你想要一条也有几百万个点的多色线,它可能会产生可怕的后果。

但是,如果您只想做一些简单的事情,例如,将低于某个点的线的任何部分涂成红色,那么我的建议是将这部分数据拆分为单独的系列,将“UnknownValuePlotting”设置为“DontPlot”。然后,如果您有任何高于阈值的值报告为空值或 NaN,则当值超过该值时,您的线将出现不连续性,因此只会显示目标值以下的线部分。通过这种方式,您可以将一行拆分为您想要显示的不同颜色。

这里需要注意的是,如果您想要拥有 20 万条不同颜色的不同线段,您可能会遇到性能限制。

另一种选择是实现一个自定义系列(从系列继承),它允许每个线段具有不同的颜色。

【讨论】:

感谢您的回复。我早些时候意识到 MarkerType 是基于系列的,而不是基于数据点的。我将继续使用 DataTemplete,使用您提供的示例应该不难。您是否拥有或知道创建自己的自定义系列的示例。再次感谢!!!

以上是关于XamDataChart 绘图颜色和标记选项的主要内容,如果未能解决你的问题,请参考以下文章

我可以将 ColorGradient 中的特定值分配给标记吗?

LWUIT: tabs - 如何标记当前选中的选项卡

基于值 R Plotly 的红色或绿色阴影颜色标记

如何根据 y 位置动态更改标记点的颜色

向 plot_ly 标记添加分类颜色会反转显示点的大小

如何从 DrawingGroup.Children 标记中的笔更改画笔颜色