我正在尝试渲染折线图,但LineSeries每次重绘图形时都会随机连接数据点。
我的项目源是我的自定义类的类型列表,它有2个属性,一个用于x轴,另一个用于y轴(两个都是'double'值)。这些属性的值不会更改并加载一次。
我的线条有几条笔直的垂直线条跳跃,即3点或4点的x轴值相同,但y值会发生变化。它将这些点与直线垂直连接起来。
但奇怪的是,它从左侧随机使用任何数据点,而另一个数据点用于连接到右侧。
我认为它使用的第一个点基于物品来源的顺序,从左边开始连接,最后一个点连接到右边。
项目来源始终采用相同的顺序,这也是我希望它们连接的顺序。
我尝试附加图片,但不允许......所以只能进行文字描述。
LineSeries ser = new LineSeries();
Chart.Series.Add(ser);
ser.DependentValuePath = "YAxis";
ser.IndependentValuePath = "XAxis"
ser.ItemsSource = data.Coordinates;
有人知道为什么会这样吗?感谢您的任何建议。
答案 0 :(得分:1)
我在创建条形图表时遇到了类似的问题。幸运的是,我的一位同事注意到Silverlight图表都是从左到右运行的 - 这会影响它如何绘制所提供的不同图表。
简单地旋转图表似乎是最好的想法 - 但它仍然有一些图表问题(我的传奇也被轮换)。
我不是一个C#编码器,所以我用Chart的风格创建了一个控件模板。我进入模板并旋转图表的edgepanel。以下是一个非常简短而通用的例子:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="charting:Chart">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
我没有在这里放置所有代码,但可以在http://silverlight.codeplex.com/SourceControl/changeset/view/80285#778932找到图表的完整模板
<chartingprimitives:EdgePanel x:Name="ChartArea"
Style="{TemplateBindingChartAreaStyle}"
RenderTransformOrigin="0.5,0.5">
<chartingprimitives:EdgePanel.RenderTransform>
<CompositeTransform Rotation="90"/>
</chartingprimitives:EdgePanel.RenderTransform>
</chartingprimitives:EdgePanel>
<Grid x:Name="PlotArea" Canvas.ZIndex="-1"
RenderTransformOrigin="0.5,0.5" />
<Border Canvas.ZIndex="10" BorderBrush="Gray"
BorderThickness="1"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
这样,图表的整个绘图区域都被翻转,允许图表向下绘图而不是强制数据向右绘图。 (我的线条没有正确绘制,并且在连接点的顺序上不稳定,我遇到了同样的问题)
它帮助我的图表(需要调整,但这给出了我能够弄清楚的一般概念)。希望它对你有所帮助。
答案 1 :(得分:0)
因为图表是基于独立值而不是基于依赖值的。我的&#34;条形图&#34;也有类似的问题。它是按照设计的。将您的图表视为横向翻转的x vs y图。现在你可以看到它是如何绘制的。根据y改变点的顺序并没有做任何事情。
我认为Telerik没有这个限制。