我一直在使用http://d3future.codeplex.com/
中提供的D3版本它一直与股票图表配合良好,但在AddLineGraph中出错。 以下代码来自其他网站帖子。
似乎某些版本的DynamicDataDisplay.dll可用(v2 / v3 / v4)使用该语句工作/编译。
非常感谢任何帮助。
public partial class MainWindow : Window
{
public ObservableDataSource<Point> source1 = null;
public MainWindow()
{
InitializeComponent();
//this.Loaded += MainWindow_Loaded;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
source1 = new ObservableDataSource<Point>();
//Set identity mapping of point
source1.SetXYMapping(p => p);
plotter3.AddLineGraph(source1, 4, "Data Row");
//Fits the chart within ViewPort
plotter3.Viewport.FitToView();
// Start computation in 2nd thread
Thread simThread = new Thread(new ThreadStart(Computation));
simThread.IsBackground = true;
simThread.Start();
}
}
答案 0 :(得分:0)
尝试AddLineChart。我不知道为什么会改变:
var x = Enumerable.Range(0, 9).Select(i => i * 100.0);
var y = new double[] { 10, 9, 7, 8, 5, 6, 4, 3, 2, 1 };
var source = DataSource.Create(x,y);
var line = plotter.AddLineChart(source)
.WithStroke(Brushes.Red)
.WithStrokeThickness(2)
.WithDescription("x vs y");
答案 1 :(得分:0)
这可能对你有帮助,
请注意,Point
是Collection
中元素的类型,Collection
是enumerable
数据点的集合。
var ds = new EnumerableDataSource<Point>(Collection);
LineGraph line;
ds.SetXMapping(x => x.X);
ds.SetYMapping(y => y.Y);
line = new LineGraph(ds);
line.LinePen = new System.Windows.Media.Pen(System.Windows.Media.Brushes.Red, 2);
//line.Description = new PenDescription("description");
Graph.Children.Add(line);
Graph.FitToView();
答案 2 :(得分:0)
感谢大家提供的有用回复。
经过多次修补(是的我是初学者)后,我发现向项目中添加5个cs文件并使用D3Future源站点上提供的DynamicDataDisplay.dll(56kb)
启用了最初发布的代码。
五个文件是::
[1] Plotter2D
[2] Plotter2DExtensions
[3] Description
[4] StandardDescription
[5] PenDescription
我现在不需要传说和描述,所以我注释掉了对它的引用,只是为了让代码能够使用AddLineGraph
方法进行编译和运行。
我使用的是Windows 10 / Visual Studio Community Edition 2015。
谢谢。
答案 3 :(得分:0)
我同意,为什么要更改此内容并特别注意不要更新所有源代码或文档。
另一方面,正在采用标准化:
<Window
...
xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0"
...
>
<d3:ChartPlotter Name="plotter" Margin="0,5,0,0">
<d3:LineGraph Name="lineGraph" Stroke="Red" StrokeThickness="1"/>
</d3:ChartPlotter>
</Window>
在守则背后:
public MainWindow()
{
InitializeComponent();
plotter.Viewport.Domain = new Rect(-1, -1.2, 20, 2.4);
plotter.Children.Add(new HorizontalScrollBar());
plotter.AxisGrid.DrawHorizontalMinorTicks = false;
plotter.AxisGrid.DrawVerticalMinorTicks = false;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
lineGraph.DataSource = CreateSineDataSource(1.0);
}
private IPointDataSource CreateSineDataSource(double phase)
{
const int N = 100;
Point[] pts = new Point[N];
for (int i = 0; i < N; i++)
{
double x = i / (N / 10.0) + phase;
pts[i] = new Point(x, Math.Sin(x - phase));
}
var ds = new EnumerableDataSource<Point>(pts);
ds.SetXYMapping(pt => pt);
return ds;
}
这是文档中显示此标准化的片段,但整理并最小化以显示构建块线图。在此处找到:http://d3future.codeplex.com/SourceControl/latest#Main/src/DevSamples/LineTestSample/Window1.xaml.cs版本:0.4
请注意使用 DataSource 。
希望这有帮助!