LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学,工程,医学,航空,贸易,能源和其他领域的体绘制功能。
LightningChart.NET现已加入在线订购,SignalTools , 12 months, WPF版本原价4105元,现价只需3499元,现在抢购立享优惠!立即购买>>
LightningChart.NET最新试用版 LightningChart JS最新试用版
问:我目前正在制作带有自定义刻度线的条形图。我在将条形图与自定义刻度线对齐时遇到问题。
我正在使用以下功能来查找x轴宽度。已经使用setRange()函数将x轴的最小值设置为0,最大值设置为1000。
private GetXAixsWidth(LightningChartUltimate _chart){var min = _chart.ViewXY.XAxes [0] .ValueToCoordD(_chart.ViewXY.XAxes [0] .Minimum);var max = _chart.ViewXY.XAxes [0] .ValueToCoordD(_chart.ViewXY.XAxes [0] .Maximum);return max - min;}
我正在使用以下功能来设置条形系列中条形的宽度。
private void SetBarsWidth(List<double> xValues){List<double> xValues = new List<double> xValues{0,150,300,400,500,700,850,900,1000};var xAxisWidth = GetXAixsWidth(_chart);var denom = (double)(xValues.Last() - xValues.First());var propWidth = xAxisWidth / denom;for (int index = 0; index < _chart.ViewXY.BarSeries.Count; index++){double cVal = xValues[index + 1] - xValues[index];var bWid = (double)(cVal * propWidth);_chart.ViewXY.BarSeries[index].BarThickness = (int)Math.Ceiling(bWid);}}
在上面的代码中,我试图通过将XValues中的最后一个第一个值减去XValues中的最后一个值来找到X轴的总宽度并找到值的范围。将总宽度除以范围后,我们得到的是比例宽度,将其与XValues中相邻值之间的差异相乘,以基于相邻值中的差异找到合适的钢筋宽度。请找到以下示例,以了解用于固定条形宽度的方法。
示例:
XAxisWidth =1200denom =1000propWidth = 1200/1000= 1.2First Bar Width = ((150-100)*1.2) = 60Second Bar Width = ((300-150)*1.2) = 180
通过上述方法,在条形图与自定义刻度线的对齐方面几乎没有偏差,这在附加的图像文件中使用红色框突出显示。BarSeries中的BarThickness期望以像素为单位的宽度(整数值),而ValueToCoordD返回坐标值(浮动值)。在将浮点值转换为整数时,我们得到的值略有变化,这使得条形图的对齐稍稍在自定义刻度线之前或之后。
如何获取自定义刻度的确切像素值,或者如果有其他方法可以解决此问题。

回复:将条形图与自定义ti对齐的条形图问题
BarViewOptions(尤其是分组)的设置是什么/span>您可以将整个项目发送到Arction的支持帐户进行测试吗/span>
我在应用程序中未使用任何BarViewOptions。
按照建议
1.将示例应用程序发送到arction的支持帐户(support@arction.com)。
2.随附示例应用程序的屏幕截图。

问题:由于BarThickness期望以像素为单位的值,所以我想知道是否可以找到以像素为单位的x轴宽度(附件中从0到1000)/p>
回复:如果要将Bar放置在特定的XAxis值,则应设置lightningchart.ViewXY.BarViewOptions.Grouping = BarsGrouping.ByLocation;
默认选项“ ByIndex ”和另一个选项“ ByIndexFitWidth ”将不依赖XAxis。取而代之的是,条形图绘制在图表的中心,而没有绑定到XAxis。请注意,您可以将Xaxis平移(拖动)到任何方向,并且条形图将保持在同一位置。
因此,您需要将“分组”设置为“按位置”,然后才比较CustomTick和Bar的位置。

单独使用该选项基本上可以解决您的问题。但是,我想提及您的应用程序中的几个问题。
首先,您使用WindowsFormsHost在WPF中放置Arction Windows窗体控件。允许这样做,但是这样做有其优点和缺点。您可以在我们的用户手册中阅读有关内容。无论如何,仅提醒您,我们有3个WPF版本,在大多数情况下,它们比通过WindowsFormsHost使用WinForm版本更好。其次,您应该使用axisX.ValueToCoordD(value,FALSE)。请注意,第二个参数设置为false,因此您可以将输出作为屏幕像素而不是DIP单位。在WinForms中,这并不重要,但是对于WPF,在缩放比例大于100%的系统中将是一个问题。
第三,您的lightningchart.SizeChanged处理程序事件未使用BeginUpdate-EndUpdate调用。当您有成百上千的酒吧系列时,这将是一个问题。只是提醒您,每个属性更改(此处为BarThickness)都将导致图表呈现。要批量更改属性,请使用BeginUpdate-EndUpdate调用。
第四,控件Resize事件在Chart实际呈现之前发生。并且在未呈现图表之前,某些属性尚未更新。这可能会导致一些意外的结果。我建议在SizeChanged事件处理程序中订阅_chart.AfterRendering事件。并且仅在AfterRendering事件处理程序中更新条的粗细(请从AfterRendering退订)第一的)。例如,
lightningchart.SizeChanged += (sender, val) => { lightningchart.AfterRendering += Lightningchart_AfterRendering; }; private void Lightningchart_AfterRendering(object sender, AfterRenderingEventArgs e) { lightningchart.AfterRendering -= Lightningchart_AfterRendering; UpdateBarThickness(); }
第五,虽然没有错,但是可以很好地替换GetXAixsWidth方法的是
axisX.GetActiveAxisArea().Width
如果对此有任何疑问,请联系客服以获取更多信息。
想要购买LightningChart正版授权,或了解更多产品信息请点击【咨询在线客服】
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!