WPF Toolkit Chart - Рисование гладкой кривой над линейчатой диаграммой
Я не могу нарисовать плавную кривую над гистограммой (на том же графике). Я не вижу вопросов, касающихся Stackru (но, возможно, пропустил).
Во всяком случае, чтобы сделать это, я думал об использовании ColumnSeries для баров с LineSeries для кривой. Проблемы, похоже, следующие:
1) Точки, которые находятся в LineSeries, но не в ColumnSeries, всегда отображаются в конце диаграммы (даже если значения X находятся между теми, которые существуют в ColumnSeries). Я думал, что эти значения могут быть использованы, чтобы сделать кривую LineSeries гладкой.
2) LineSeries также контролирует интервал между значениями X. Все, что я хочу, это LineSeries, который будет использоваться для рисования плавной кривой между столбцами. На самом деле, наличие множества точек в LineSeries делает стержни очень тонкими там, где они должны быть толстыми. Другими словами, ColumnSeries в идеале контролировал бы метки и толщину полос (не LineSeries).
XAML является
<Grid>
<chartingToolkit:Chart x:Name="MainChart" HorizontalAlignment="Left" Margin="59,35,0,0" Title="Chart Title" VerticalAlignment="Top" Height="246" Width="405">
<chartingToolkit:ColumnSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding BarCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding LineCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</chartingToolkit:Chart>
</Grid>
Код позади
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
// Add sample curve points
LineCollection.Add(new KeyValuePair<double, double>(1, 11));
LineCollection.Add(new KeyValuePair<double, double>(1.5, 18));
LineCollection.Add(new KeyValuePair<double, double>(2, 22));
LineCollection.Add(new KeyValuePair<double, double>(2.5, 35));
LineCollection.Add(new KeyValuePair<double, double>(3, 42));
// Primary bars being added
BarCollection.Add(new KeyValuePair<double, double>(1, 10));
BarCollection.Add(new KeyValuePair<double, double>(2, 20));
BarCollection.Add(new KeyValuePair<double, double>(3, 40));
}
/// <summary>
/// Core event handler for the view model.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Routes property changed events.
/// </summary>
/// <param name="propertyName"> Defines the property name upon which routing is determined. </param>
public void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
ObservableCollection<KeyValuePair<double, double>> barCollection = new ObservableCollection<KeyValuePair<double, double>>();
public ObservableCollection<KeyValuePair<double, double>> BarCollection
{
get
{
return barCollection;
}
set
{
barCollection = value;
}
}
ObservableCollection<KeyValuePair<double, double>> lineCollection = new ObservableCollection<KeyValuePair<double, double>>();
public ObservableCollection<KeyValuePair<double, double>> LineCollection
{
get
{
return lineCollection;
}
set
{
lineCollection = value;
}
}
}
Спасибо,
доллар