原創|行業資訊|編輯:楊鵬連|2021-04-16 14:57:25.340|閱讀 278 次
概述:本文主要介紹了高性能圖表控件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返回坐標值(浮動值)。在將浮點值轉換為整數時,我們得到的值略有變化,這使得條形圖的對齊稍稍在自定義刻度線之前或之后。
如何獲取自定義刻度的確切像素值,或者如果有其他方法可以解決此問題。
回復:將條形圖與自定義ti對齊的條形圖問題
BarViewOptions(尤其是分組)的設置是什么?我在應用程序中未使用任何BarViewOptions。
按照建議
問題:由于BarThickness期望以像素為單位的值,所以我想知道是否可以找到以像素為單位的x軸寬度(附件中從0到1000)?
1.將示例應用程序發送到arction的支持帳戶(support@arction.com)。
2.隨附示例應用程序的屏幕截圖。
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正版授權,或了解更多產品信息請點擊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: