我使用实时图表。 SeriesCollection通过线系列,其中值=图表值。在Binding的xaml中,我传递了SeriesCollection。我了解仅传输y点(默认情况下,我不做任何更改)。如何传递x点?在ChartValue中按索引进行尝试,发誓索引为空。而且,即使您最初设置了“图表值”的大小,图表上未填充的单元格也会被填充为Y =0。请坐三天。
GenerateChart.cs:
public ChartValues<double> Points { get; set; }
double[] arraySeries = new double[30];
double[] array = new double[20];
public LineSeries GenerateSeries(string axis)
{
Random randomSeries = new Random();
ChartValues<double> series = new ChartValues<double>(new double[20]);
if (axis == "Y")
{
for (int i = 0; i < 5; i++)
{
double randomValue = randomSeries.Next(1, 20);
if (!array.Contains(randomValue))
{
array[i] = randomValue;
}
else
{
i--;
}
}
for (int i = 0; i < 5; i++)
{
double randomValue = randomSeries.Next(1, 20);
if (!arraySeries.Contains(randomValue))
{
int index = Convert.ToInt32(array[i]);
arraySeries[index] = randomValue;
}
else
{
i--;
}
}
for (int i = 0; i < 20; i++)
{
if (arraySeries[i] != 0)
{
series.Insert(i, arraySeries[i]);
}
}
//series.AddRange(arraySeries);
}
Points = series;
var testSeries = new LineSeries
{
Title = "Test",
Values = series
};
return testSeries;
}
RandomSeries.cs:
public SeriesCollection Series { get; private set; }
public SeriesCollection SeriesX { get; private set; }
public ChartValues<double> Points { get; private set; }
double[] arraySeries = new double[30];
double[] array = new double[20];
public SeriesCollection BuidChart()
{
Random randomSeries = new Random();
var generateChart = new GenerateChart();
Series = new SeriesCollection
{
generateChart.GenerateSeries("Y")
};
Points = generateChart.Points;
return Series;
}
ModelView.cs:
public SeriesCollection SeriesCollection { get; set; }
public ChartValues<double> Points { get; set; }
public RandomSeries randomSeries;
public Func<double, string> YFormatter { get; set; }
public string[] Labels { get; set; }
public SeriesCollection SeriesCollectionX { get; set; }
public void BuildFunction()
{
//Points.Clear();
//SeriesCollection.Clear();
randomSeries = new RandomSeries();
SeriesCollection = new SeriesCollection();
Points = new ChartValues<double>();
SeriesCollection.AddRange(randomSeries.BuidChart());
//Points.AddRange(randomSeries.Points);
//SeriesCollection.AddRange(randomSeries.BuidChart());
//Points.AddRange(randomSeries.Points);
Labels = new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jan1", "Feb1", "Mar1", "Apr1", "May1" };
}
MainWindow.xaml:
<Window.DataContext>
<local:ModelView/>
</Window.DataContext>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="257*"/>
<ColumnDefinition Width="536*"/>
</Grid.ColumnDefinitions>
<lvc:CartesianChart Series="{Binding SeriesCollection}" LegendLocation="Right" Grid.ColumnSpan="2" Margin="0,0,-0.4,0" >
<!--<lvc:CartesianChart.AxisY>
<lvc:Axis Title="Y" LabelFormatter="{Binding YFormatter}"></lvc:Axis>
</lvc:CartesianChart.AxisY>-->
<lvc:CartesianChart.AxisX>
<lvc:Axis Title="X" Labels="{Binding Labels}"></lvc:Axis>
</lvc:CartesianChart.AxisX>
</lvc:CartesianChart>
</Grid>
答案 0 :(得分:1)
好的,在LiveChart中可以使用ObservablePoint来表示图表中X,Y的位置。
您需要添加适当的名称空间才能使用这些
using LiveCharts.Defaults;
我在函数中修改了两件事,首先我将ObservablePoint的定义和初始化更改为ChartValues的值为empty和typeof,因此稍后我们将动态填充它们。您还需要将Points对象更改为ObservablePoint类型
ChartValues<ObservablePoint> series = new ChartValues<ObservablePoint>();
还修改了这些系列对象的填充以仅添加非零:
for (int i = 0; i < 20; i++)
{
if (arraySeries[i] != 0)
{
series.Add(new ObservablePoint(i, arraySeries[i]));
}
}
它不会在非零之间绘制零y点。