【问题标题】:Column Series With different color on a different interval at x-axis fill in same series?列系列在x轴的不同间隔上使用不同的颜色填充同一个系列?
【发布时间】:2017-08-02 09:48:15
【问题描述】:

我正在尝试实现速度/时间绘图 UI,我正在使用带有 MVVM 模式的 WPF 和 beto-rodriguez 的实时图表作为我的绘图库。 我正在使用列系列。

我有两个问题: 1)我必须在x轴中间开始系列怎么做?例如,如果我将最小值设置为 7,则图形将 x 轴作为 7 开始,将其作为第一个点,但我希望 x 轴从 1 开始,但图形绘制应从 7 开始。

2) 我必须在特定条件下更改系列的颜色,比如当 x= 10 时我希望它显示为蓝色但当 x= 17 时我希望仅针对该值显示与粉色相同的系列在任何时候它都应该是原始颜色。

任何指针?

【问题讨论】:

    标签: c# wpf mvvm livecharts


    【解决方案1】:

    你有几个选择:

    对每个点使用不同的系列:

    <lvc:CartesianChart>
       <lvc:CartesianChart.Series>
          <lvc:ColumnSeries Fill="Red" />
          <lvc:ColumnSeries Fill="Blue" />
    

    您可以使用映射器设置它们,例如:https://lvcharts.net/App/examples/v1/wpf/Point%20State

    【讨论】:

    • 如果我错了请告诉我,它将创建两个不同的系列,我想要的是我有两个系列用于网络上传和下载,显示为实时图表......现在我想要什么是当我的 vpn 断开连接时,两个系列的颜色在 vpn 断开连接时发生变化,但在此之前系列应该是原始颜色......并且这些系列应该继续在实时图表中移动......系列我必须使用的是列系列。
    • 非常感谢@bto.rdz 它通过这个链接为我工作:)
    【解决方案2】:

    您好,我用这段代码解决了这个问题: 在我的情况下,我需要具有不同颜色的实际小时数据的列。

    代码背后:

     public Brush DangerBrushFill { get; set; } = new SolidColorBrush(Colors.DarkOrange);
     public Brush DangerBrushStroke { get; set; } = new SolidColorBrush(Colors.Black);
     public CartesianMapper<Double> Mapper { get; set; }
     public ChartValues<double> ChartValues { get; private set; }
    
            Mapper = Mappers.Xy<Double>()
                .X((item, index) => item)
                .Y((item, index) => index)                
                .Fill((item, index) => 
                (item > 0 && index == DateTime.Now.Hour - 1) ? DangerBrushFill : null)
                .Stroke((item, index) =>
                (item > 0 && index == DateTime.Now.Hour - 1) ? DangerBrushFill : null);
    
            SeriesCollection = new SeriesCollection
            {
                new RowSeries
                {
                    Configuration=Mapper,
                    Values = ChartValues,
                    StrokeThickness = 3
                }
            };          
    

    Xaml:

     <lvc:CartesianChart    Hoverable="False"                            
                            Series="{Binding SeriesCollection}">
    

    希望对你有所帮助。

    【讨论】:

      【解决方案3】:

      1) 是否可以在开头用 0 填充 ColumnSeries 的值?例如 ColumnSeries 的值将是这样的,如果你想从 7 开始你的图表:{0, 0, 0, 0, 0, 0, 10, 12, 14, 16}

      2) 你能再举一个条件的例子吗?你的意思是 x=10 还是 y=10?这是Issue 与您的问题有关吗?

      【讨论】:

      • 感谢您的回复,是的,我之前尝试过它工作正常,正在寻找任何其他更好的解决方案。 2)我有一个条件,当互联网断开连接时,我想在 x 轴上显示蓝色,当用户再次连接时,它必须显示粉红色,所以如果我可以更改系列的颜色,这就是为什么在某个 x 轴值上指定的原因在实时图表中。
      • 我在 github 实时图表上提出了这个问题,但没有收到任何回复 :)
      • @Yvonnila 你找到如何一一填充ColumnSeries的值了吗?
      • @fatihyildizhan 不,我没有。很抱歉,我很久没有使用 LiveCharts...
      猜你喜欢
      • 1970-01-01
      • 2012-07-10
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多