【问题标题】:visifire Custom Axis Labels Not Showingvisifire 自定义轴标签不显示
【发布时间】:2013-03-08 11:43:56
【问题描述】:

我需要将我的图表导出为图像而不首先在 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,否则在拍摄图像时该系列尚未渲染 - 我花了很长时间才弄清楚。

【问题讨论】:

  • 您能告诉我在 CustomAxisLabel 的“From”和“To”属性中设置了哪些值吗?

标签: c# visifire


【解决方案1】:

我已经找到了解决方案:

当超出界限时,值设置为 Double.NaN。我发现,如果 Collections Double.Nan 或 Double.Infinity 中有任何值,所有标签的创建都会失败 - 似乎是 visifire 中的错误。

我通过在其单独的集合中添加每个标签来解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多