簡體   English   中英

visifire自定義軸標簽未顯示

[英]visifire Custom Axis Labels Not Showing

我需要將我的圖表導出為圖像,而不先在WPF中顯示它。 所以我用代碼建立了圖表:

    public void CreateHistogram(CalcRepository cr, int i)
    {
        Chart chart = new Chart();

        chart.Width = 300;
        chart.Height = 200;
        chart.ScrollingEnabled = false;
        chart.AnimationEnabled = false;
        chart.TrendLines.Add(new TrendLine{Value = cr.Mean,Orientation = System.Windows.Controls.Orientation.Vertical});
        chart.TrendLines.Add(new TrendLine{Value = cr.ChartTrippleNegativeStdDeviation,Orientation = System.Windows.Controls.Orientation.Vertical,LineStyle = LineStyles.Dashed});chart.TrendLines.Add(new TrendLine{Value = cr.ChartTripplePositiveStdDeviation,Orientation = System.Windows.Controls.Orientation.Vertical,LineStyle = LineStyles.Dashed});
        chart.TrendLines.Add(new TrendLine{Value = cr.UpperSpecificationLimit,Orientation = System.Windows.Controls.Orientation.Vertical});
        chart.TrendLines.Add(new TrendLine{Value = cr.LowerSpecificationLimit,Orientation = System.Windows.Controls.Orientation.Vertical});
        chart.TrendLines[0].SetValue(Canvas.ZIndexProperty, 40);
        chart.TrendLines[1].SetValue(Canvas.ZIndexProperty, 40);
        chart.TrendLines[2].SetValue(Canvas.ZIndexProperty, 40);
        chart.TrendLines[3].SetValue(Canvas.ZIndexProperty, 40);
        chart.TrendLines[4].SetValue(Canvas.ZIndexProperty, 40);



        chart.DataPointWidth = cr.DataPointWidth;
        chart.Visibility = Visibility.Visible;
        Axis x = new Axis();
        x.AxisMaximum = cr.VisUpperBound;
        x.AxisMinimum = cr.VisLowerBound;
        x.AxisType = AxisTypes.Primary;

        CustomAxisLabels cal = new CustomAxisLabels();
        cal.Labels.Add(new CustomAxisLabel {From = cr.Mean, To = cr.Mean, Text = "Mean"});
        cal.Labels.Add(new CustomAxisLabel {From = cr.ChartTrippleNegativeStdDeviation,To = cr.ChartTrippleNegativeStdDeviation,Text = "LCL"});
        cal.Labels.Add(new CustomAxisLabel{From = cr.ChartTripplePositiveStdDeviation,To = cr.ChartTripplePositiveStdDeviation,Text= "UCL"});
        cal.Labels.Add(new CustomAxisLabel {From = cr.UpperSpecificationLimit, To = cr.UpperSpecificationLimit , Text = "USL"});
        cal.Labels.Add(new CustomAxisLabel {From = cr.LowerSpecificationLimit, To = cr.LowerSpecificationLimit, Text = "LSL"});

        cal.FontSize = 10;
        cal.Angle = 0;
        cal.FontColor = new SolidColorBrush(Colors.Black);
        cal.Enabled = true;


        x.CustomAxisLabels.Add(cal);
        chart.AxesX.Add(x);

        var ds = new DataSeries();
        var dpc = new DataPointCollection(cr.HistogramValues);
        ds.DataPoints = dpc;

        chart.Series.Add(ds);


        ds.ZIndex = 1;
        ds.Bevel = false;
        ds.ShadowEnabled = false;
        ds.LightingEnabled = false;
        ds.Color = new SolidColorBrush(Colors.SteelBlue);


        chart.BeginInit();
        chart.EndInit();
        chart.Measure(new Size(300, 200));
        chart.Arrange(new Rect(0, 0, 300, 200));
        chart.UpdateLayout();

        ExportToPng(new Uri("C:\\" + i + ".png"), chart);
    }

一切工作正常,但缺少自定義軸標簽。 這是輸出的樣子:

圖表輸出

如您所見,甚至為CustomAxis標簽分配了空間,但未顯示。 有人知道嗎?

提示:必須將AnimationEnabled設置為false,否則在拍攝圖像時尚未渲染該系列-我花了很長時間才弄清楚。

我已經找到了解決方案:

超出界限時,值將設置為Double.NaN。 我發現,如果Collections Double.Nan或Double.Infinity中的任何值,則所有Label的創建都會失敗-似乎在visifire中有一個bug。

我通過在其單獨的集合中添加每個Label來解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM