渲染两个 LineSeries 而不缩放

发布于 2024-10-31 11:27:37 字数 317 浏览 1 评论 0原文

我有 2 个系列系列,一个在其数据中跟随另一个系列,它们都代表月日,例如:

第一个系列:
1 2 3 4 5 6 7

第二系列:
1 2 3 4 5 6 7 8 ... 29 30 31

第一个系列始终包含(或等于)第二个系列。

我想在折线图上表示这两个系列,第一个系列不会在整个图表宽度上按比例放大(7 / 31 ~= 0.25,因此它必须占据 X 轴的第一个水平四分之一)。

所以,我认为我需要某种图表轴来渲染 31 天,然后 2 个系列将遵循该轴并根据它进行渲染。 (无需缩放第一个系列以填充 X 轴的所有水平空间)。

I have 2 line series-es, one which follow the other in its data, they both represent month days, for example:

1st Series:
1 2 3 4 5 6 7

2nd Series:
1 2 3 4 5 6 7 8 ... 29 30 31

The first series is always contained in (or equals to) the second one.

I want to represent these two series-es on a Line Chart, in a way that the first series is not scaled up on the full chart width (7 / 31 ~= 0.25, so it must occupy the first horizontal quarter of the X axis).

So, I think I need some kind of a Chart Axis which will render the 31 days and then the 2 series-es will follow that axis and be rendered according to it. (without scaling the 1st series to fill all the horizontal space of the X axis).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

要走干脆点 2024-11-07 11:27:38

看起来似乎很简单。

这是屏幕截图,7 个蓝点代表第 1 个系列,31 个红点代表第 2 个系列。检查是否是您需要的
在此处输入图像描述

如果图表显示正确,则这是其源代码:

XAML

    <chart:Chart>
        <chart:LineSeries ItemsSource="{Binding FirstWeekItems}" 
                          IndependentValueBinding="{Binding Day}" 
                          DependentValueBinding="{Binding Value}" />
        <chart:LineSeries ItemsSource="{Binding MonthItems}" 
                          IndependentValueBinding="{Binding Day}" 
                          DependentValueBinding="{Binding Value}" />
    </chart:Chart>

Code-behind

public partial class MainPage : UserControl
{
    public MainPage()
    {
        this.InitializeComponent();

        Random rd = new Random();
        var vm = new ChartModel
        {
            FirstWeekItems = Enumerable.Range(1,7).Select(i => new ItemViewModel{Day = i, Value = rd.Next(23,25)}).ToList(),
            MonthItems = Enumerable.Range(1, 31).Select(i => new ItemViewModel { Day = i, Value = 20+i }).ToList()
        };
        this.DataContext = vm;
    }
}

public class ChartModel
{
    public List<ItemViewModel> FirstWeekItems { get; set; }

    public List<ItemViewModel> MonthItems { get; set; }
}

public class ItemViewModel
{
    public int Day { get; set; }
    public double Value { get; set; }
}

It seems to be quite simple.

Here is the screenshot, 7 blue points represent the 1st series, 31 red points - the 2nd series. Check if it is that what you need
enter image description here

If the chart is displayed right, here is its source code:

XAML

    <chart:Chart>
        <chart:LineSeries ItemsSource="{Binding FirstWeekItems}" 
                          IndependentValueBinding="{Binding Day}" 
                          DependentValueBinding="{Binding Value}" />
        <chart:LineSeries ItemsSource="{Binding MonthItems}" 
                          IndependentValueBinding="{Binding Day}" 
                          DependentValueBinding="{Binding Value}" />
    </chart:Chart>

Code-behind

public partial class MainPage : UserControl
{
    public MainPage()
    {
        this.InitializeComponent();

        Random rd = new Random();
        var vm = new ChartModel
        {
            FirstWeekItems = Enumerable.Range(1,7).Select(i => new ItemViewModel{Day = i, Value = rd.Next(23,25)}).ToList(),
            MonthItems = Enumerable.Range(1, 31).Select(i => new ItemViewModel { Day = i, Value = 20+i }).ToList()
        };
        this.DataContext = vm;
    }
}

public class ChartModel
{
    public List<ItemViewModel> FirstWeekItems { get; set; }

    public List<ItemViewModel> MonthItems { get; set; }
}

public class ItemViewModel
{
    public int Day { get; set; }
    public double Value { get; set; }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文