Как показать пустое значение на графике Telerik? - PullRequest
0 голосов
/ 08 ноября 2019

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

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

Это мой класс C # с кодом для страницы, он использует код позади.

public sealed partial class MainPage : Page 
{
    ObservableCollection<DataPoint> Data { get; } = new ObservableCollection<DataPoint>();
    public MainPage()
    {
        InitializeComponent();
        MainChart.Loaded += MainChart_Loaded;
    }

    private void MainChart_Loaded(object sender, RoutedEventArgs e)
    {
        var now = new DateTime(2019, 11, 7, 19, 5, 50);
        Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(7)), 0.2));
        Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(6)), 0.1));
        Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(5))));
        Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(4))));
        Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(3))));
        Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(2)), 0.6));
        Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(1)), 0.7));
        Data.Add(new DataPoint(now, 0.9));
    }
}

public class DataPoint
{
    public DataPoint(DateTime time, double? y = null)
    {
        Time = time;
        Y = y;
    }
    public DateTime Time { get; set; }
    public double? Y { get; set; }
}

Это часть, где я настраиваю диаграмму.

<Grid>
    <telerik:RadCartesianChart x:Name="MainChart">
        <telerik:RadCartesianChart.HorizontalAxis>
            <telerik:DateTimeContinuousAxis />
        </telerik:RadCartesianChart.HorizontalAxis>
        <telerik:RadCartesianChart.VerticalAxis>
            <telerik:LinearAxis />
        </telerik:RadCartesianChart.VerticalAxis>
        <telerik:LineSeries ItemsSource="{x:Bind Data}">
            <telerik:LineSeries.ValueBinding>
                <telerik:PropertyNameDataPointBinding PropertyName="Y" />
            </telerik:LineSeries.ValueBinding>
            <telerik:LineSeries.CategoryBinding>
                <telerik:PropertyNameDataPointBinding PropertyName="Time" />
            </telerik:LineSeries.CategoryBinding>
        </telerik:LineSeries>
    </telerik:RadCartesianChart>
</Grid>

Я также пытался использовать DateTimeCategoricalAxis, но отображаются только категории, в которых есть данные.

DateTmeCategoricaAxis only shows the categories which have full data.

И я также попытался установить основной шаг равным двум и единице, а единицу шага - секундами, но это только изменило способ отображения Xось.

На основе этого веб-сайта (https://www.telerik.com/universal-windows-platform-ui/chart), это поддерживаемое поведение, но я не смог найти документы, указывающие, как его следует реализовывать. Также данные, прежде чем вводить нулевые значения,не отображается.

Expected gap between values, but no gap is presented and no previews data to where the gap should be.

Если я удаляю нулевые значения Y,

private void MainChart_Loaded(object sender, RoutedEventArgs e)
{
    var now = new DateTime(2019, 11, 7, 19, 5, 50);
    Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(7)), 0.2));
    Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(6)), 0.1));
    //Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(5))));
    //Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(4))));
    //Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(3))));
    Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(2)), 0.6));
    Data.Add(new DataPoint(now.Subtract(TimeSpan.FromSeconds(1)), 0.7));
    Data.Add(new DataPoint(now, 0.9));
}

Данные показывают и без пропуска, но это будет ожидаемое поведение.

All data is shown, and no gap as expected.

...