彩票走势图

高性能图表控件LightningChart将条形图与自定义刻度对齐问题解答

原创|行业资讯|编辑:杨鹏连|2021-04-16 14:57:25.340|阅读 199 次

概述:本文主要介绍了高性能图表控件LightningChart 如何将条形图与自定义刻度对齐问题解答。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

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 =1200
denom =1000
propWidth = 1200/1000= 1.2

First Bar Width = ((150-100)*1.2) = 60
Second Bar Width = ((300-150)*1.2) = 180
通过上述方法,在条形图与自定义刻度线的对齐方面几乎没有偏差,这在附加的图像文件中使用红色框突出显示。BarSeries中的BarThickness期望以像素为单位的宽度(整数值),而ValueToCoordD返回坐标值(浮动值)。在将浮点值转换为整数时,我们得到的值略有变化,这使得条形图的对齐稍稍在自定义刻度线之前或之后。

如何获取自定义刻度的确切像素值,或者如果有其他方法可以解决此问题。

Histogram_Allignment_Issue.jpg

回复:将条形图与自定义ti对齐的条形图问题

BarViewOptions(尤其是分组)的设置是什么?
您可以将整个项目发送到Arction的支持帐户进行测试吗?

我在应用程序中未使用任何BarViewOptions。

按照建议
1.将示例应用程序发送到arction的支持帐户(support@arction.com)。
2.随附示例应用程序的屏幕截图。

Barcharissue.png

问题:由于BarThickness期望以像素为单位的值,所以我想知道是否可以找到以像素为单位的x轴宽度(附件中从0到1000)? 

回复:如果要将Bar放置在特定的XAxis值,则应设置
lightningchart.ViewXY.BarViewOptions.Grouping = BarsGrouping.ByLocation; 

默认选项“ ByIndex ”和另一个选项“ ByIndexFitWidth ”将不依赖XAxis。取而代之的是,条形图绘制在图表的中心,而没有绑定到XAxis。请注意,您可以将Xaxis平移(拖动)到任何方向,并且条形图将保持在同一位置。
因此,您需要将“分组”设置为“按位置”,然后才比较CustomTick和Bar的位置。

Bars_ByLocation.jpg

单独使用该选项基本上可以解决您的问题。但是,我想提及您的应用程序中的几个问题。

首先,您使用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正版授权,或了解更多产品信息请点击


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP