Dynamic Data Display charting: change Y axis range
有人知道是否有任何方法可以从D3更改折线图上的Y轴限制吗?
我正在使用Codeplex来源的最新版本... WPF版本,而不是Silverlight版本。
我正在绘制来自Android传感器的读数,并且范围值发生了很大变化。 有时它大约为零,并且图形如下所示:
然后值的大小改变,Y轴重新缩放以显示整个数据,现在该图如下所示:
查看Y值如何从图片1变为2。
我想要的是使Y轴具有我选择的固定值,例如-10到+10。 然后,将始终以相同的比例绘制图形。
有什么办法吗?
该图的XAML代码是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <d3:ChartPlotter Name="gyroGraph" Margin="21,5,10,0" Grid.ColumnSpan="2" Background="White" Grid.Row="1" LegendVisibility="Collapsed" NewLegendVisible="False" MainHorizontalAxisVisibility="Collapsed" MainVerticalAxisVisibility="Collapsed"> <d3:VerticalAxis FontSize="8" /> <d3:Header Content="Angular Velocity" FontSize="11" /> </d3:ChartPlotter> |
谢谢和最诚挚的问候,
罗德里戈·巴斯尼亚克
希望不是太晚,但是我遇到了同样的问题,并在d3的论坛中找到了解决方案:http://dynamicdatadisplay.codeplex.com/discussions/281164
该代码是由d3用户" fromDKwithlove"创建的。
这是应如何应用限制:
1 2 3 |
这是代码背后的类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public class DisplayRange { public double Start { get; set; } public double End { get; set; } public DisplayRange(double start, double end) { Start = start; End = end; } } public class ViewportAxesRangeRestriction : IViewportRestriction { public DisplayRange XRange = null; public DisplayRange YRange = null; public Rect Apply(Rect oldVisible, Rect newVisible, Viewport2D viewport) { if (XRange != null) { newVisible.X = XRange.Start; newVisible.Width = XRange.End - XRange.Start; } if (YRange != null) { newVisible.Y = YRange.Start; newVisible.Height = YRange.End - YRange.Start; } return newVisible; } public event EventHandler Changed; } |
我不确定您想要的确切行为-如有必要,可以澄清一下。
我需要使用FitToView将固定的初始轴设置为特定值,以便当图形增大初始轴时,此轴将自动调整大小。
为此,我将FitToViewRestriction与DomainRestriction结合使用:
1 2 3 | <d3:ChartPlotter.FitToViewRestrictions> <d3:DomainRestriction Domain="0,0,10,14000"/> </d3:ChartPlotter.FitToViewRestrictions> |
此处,域矩形是确定初始轴限制的初始视口矩形。设置FitToView表示当图形超出此初始限制时,轴将缩放。
但是请注意,在我们使用的D3版本(0.3.4703.0)中,DomainRestriction.Apply的实现没有提供我想要的行为,因此有必要在此修改源代码。有关文件是DynamicDataDisplay \ v0.3.4703-每晚src \ src \ DynamicDataDisplay \ ViewportRestrictions \ DomainRestrictions.cs。
我修改了DomainRestriction。适用于:
1 2 3 | public override DataRect Apply(DataRect oldDataRect, DataRect newDataRect, Viewport2D viewport) { return (domain.IsEmpty) ? newDataRect : DataRect.Union(newDataRect, domain); } |
给出了我所描述的行为。我认为您想要类似的东西,但仅适用于x轴。也就是说,您希望y保持固定在其初始值,但是您希望x随着随FitToView一起输入的数据而缩放。只需修改上述方法,您就应该能够获得该行为。
如果要对DateTime进行相同操作,只需更改DisplayRange对象的创建,如下所示:
1 2 3 4 5 |