Как я могу иметь метку на каждом столбце в диаграмме, используя живые диаграммы - PullRequest
2 голосов
/ 03 июля 2019

Использование LiveCharts (https://lvcharts.net/) и C # Я хочу иметь диаграмму, где каждый столбец имеет метку на оси X. Однако я получаю метку только на каждом втором столбце. Эти метки существуют в данных, так как Я вижу их во всплывающем окне при наведении курсора на столбцы.

Я пробовал возиться с различными свойствами меток на оси, а также с моим форматером меток, но я только когда-либо получал метку в каждом втором столбце.

Моя XAML-реализация моей диаграммы:

<lvc:CartesianChart Name="CartesianChart" Series="{Binding Series}" MinHeight="400" MinWidth="800" >

    <lvc:CartesianChart.AxisX>
        <lvc:Axis MinValue="0" Labels="{Binding XAxisLabels}" ShowLabels="True" LabelsRotation="50">
            <lvc:Axis.Separator>
                <lvc:Separator Stroke="{Binding AxisStrokeColor}">/lvc:Separator>
            </lvc:Axis.Separator>
        </lvc:Axis>
    </lvc:CartesianChart.AxisX>

    <lvc:CartesianChart.AxisY>
        <lvc:Axis MinValue="0"   MaxValue="10" LabelFormatter="{Binding LabelFormatter}">
            <lvc:Axis.Separator>
                <lvc:Separator Stroke="{Binding AxisStrokeColor}">/lvc:Separator>
            </lvc:Axis.Separator>
        </lvc:Axis>
    </lvc:CartesianChart.AxisY>
</lvc:CartesianChart>

Мой код для создания моей диаграммы:

public partial class Chart : UserControl
{
    public SolidColorBrush AxisStrokeColor { get; set; }
    public SeriesCollection Series { get; set; }
    public string[] XAxisLabels { get; set; }
    public Func<double, string> LabelFormatter { get; set; }

    public Chart()
    {
        Series = new SeriesCollection();
        InitializeComponent();
        AxisStrokeColor = Brushes.Transparent;
        CartesianChart.DataContext = this;
        CartesianChart.LegendLocation = LegendLocation.Right;
    }

    public void addBarSeries(List<KeyValuePair<string, double>> data, string title)
    {
        ChartValues<ObservableValue> values = new ChartValues<ObservableValue>();
        string[] labels = new string[data.Count];

        for (int i = 0; i < data.Count; i++)
        {
            values.Add(new ObservableValue(data[i].Value));
            labels[i] = data[i].Key;
        }

        Series.Add(new ColumnSeries
            {
                Title = title,
                Values = values,
                DataLabels = true,
            });

        XAxisLabels = labels;
        LabelFormatter = value => value.ToString("N");
    }
}

Функция, которую я использую для заполнения диаграммы тестовыми данными

Chart.addBarSeries(seedData3(), "myTitle");

public List<KeyValuePair<string, double>> seedData3()
        {
            var returnCollection = new List<KeyValuePair<string, double>>();

            for (int i = 0; i < 10; i++)
            {

                returnCollection.Add(new KeyValuePair<string, double>("Timmy " + i, i));
            }

            return returnCollection;
        }

Как я могу убедиться, что для каждого столбца отображается метка?

1 Ответ

1 голос
/ 03 июля 2019

Количество меток, показанных на оси, рассчитывается автоматически, чтобы соответствовать виду без наложения.

Если вы хотите принудительно установить значение отображаемых меток, просто добавьте свойство Step в Separator:

<lvc:Separator Step="1" Stroke="{Binding AxisStrokeColor}"></lvc:Separator>
...