Проблема с вертикальной осью CartesianChart при запуске Livecharts в WPF - PullRequest
1 голос
/ 24 апреля 2020

Я реализовал линейную диаграмму в своем приложении WPF. Однако, когда я запускаю свое приложение, моя вертикальная ось Y на графике не использует все заданное пространство. Короче говоря, ось Y разрушается.

Диаграмма, когда программа не запущена The chart when the program isn't run

Код в ProfileWindow.xaml:

<lvc:CartesianChart Series="{Binding SeriesCollection}" LegendLocation="Right" Grid.Row="2" Grid.Column="2" Grid.RowSpan="3">
            <lvc:CartesianChart.AxisY>
                <lvc:Axis Title="Height" MinValue="0" MaxValue="1000" LabelFormatter="{Binding YFormatter}">
                    <lvc:Axis.Separator>
                        <lvc:Separator Step="50"></lvc:Separator>
                    </lvc:Axis.Separator>
                </lvc:Axis>
            </lvc:CartesianChart.AxisY>
            <lvc:CartesianChart.AxisX>
                <lvc:Axis Title="Samples" Labels="{Binding Labels}"></lvc:Axis>
            </lvc:CartesianChart.AxisX>
        </lvc:CartesianChart>
    </Grid>

Я пытался использовать Axis .Separator для использования установленного шага 50. Но, как вы можете видеть, это не работает.

Диаграмма при запуске Visual Studio: The chart when running Visual studio

код в Mainwindow.xaml.cs

        public MainWindow()
        {
            InitializeComponent();
            AppWindow = this;
            OpenChildWindow(new DashboardWindow());

            SeriesCollection = new SeriesCollection
            {
                new LineSeries
                {
                    Title = "Series 1",
                    Values = new ChartValues<double> { 4, 60, 5, 2 ,4 }
                },
                new LineSeries
                {
                    Title = "Series 2",
                    Values = new ChartValues<double> { 6, 7, 30, 4 ,6 },
                },
                new LineSeries
                {
                    Title = "Series 3",
                    Values = new ChartValues<double> { 4,2,700,2,7 },
                }
            };

            Labels = new[] { "Jan", "Feb", "Mar", "Apr", "May" };
            YFormatter = value => value.ToString("C");

            DataContext = this;
        }

        public SeriesCollection SeriesCollection { get; set; }
        public string[] Labels { get; set; }
        public Func<double, string> YFormatter { get; set; }

Где моя ошибка в мышлении / реализации?

1 Ответ

1 голос
/ 24 апреля 2020

Если установить Axis.MaxValue на фиксированное значение, график не сможет масштабироваться.

Удалите атрибут MaxValue с оси Y. Диапазон оси будет автоматически определен максимальным значением точек данных или серии. Таким образом, график всегда будет использовать максимально доступное пространство на экране (в соответствии с масштабом).

<lvc:CartesianChart Series="{Binding SeriesCollection}"
                    Height="300" 
                    LegendLocation="Right" 
                    Grid.Row="2" 
                    Grid.Column="2"                        
                    Grid.RowSpan="3">
  <lvc:CartesianChart.AxisY>
    <lvc:Axis Title="Height" LabelFormatter="{Binding YFormatter}">
      <lvc:Axis.Separator>
        <lvc:Separator Step="50" />
      </lvc:Axis.Separator>
    </lvc:Axis>
  </lvc:CartesianChart.AxisY>
  <lvc:CartesianChart.AxisX>
    <lvc:Axis Title="Samples" Labels="{Binding Labels}" />
  </lvc:CartesianChart.AxisX>
</lvc:CartesianChart>
...