【问题标题】:Core Plot: x-axis labels not plotted when using scaleToFitPlots核心图:使用 scaleToFitPlots 时未绘制 x 轴标签
【发布时间】:2012-12-02 12:01:14
【问题描述】:

问题:在使用自动缩放 ([plotSpace scaleToFitPlots:[graph allPlots]) 时,我无法让 Core Plot (1.1) 为我的 x 轴绘制自动标签。

我的尝试:我更改了偏移量和填充的值,但这并没有改变结果。 但是,当关闭自动缩放时(不使用[plotSpace scaleToFitPlots:[graph allPlots]]并自动设置y 缩放,x 轴的自动标记会起作用。

问题:Core Plot 中是否存在错误或我做错了什么? 我将不胜感激!

谢谢!

这就是我设置图表的方式:

CPTBarPlot *barPlot = [CPTBarPlot 
   tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:NO];
barPlot.baseValue       = CPTDecimalFromInt(0);
barPlot.barOffset       = CPTDecimalFromFloat(0.0f); // CPTDecimalFromFloat(0.5f);
barPlot.barWidth        = CPTDecimalFromFloat(0.4f);
barPlot.barCornerRadius = 4;
barPlot.labelOffset = 5;
barPlot.dataSource      = self;
barPlot.delegate        = self;
 
graph = [[CPTXYGraph alloc]initWithFrame:self.view.bounds];
   self.hostView.hostedGraph = graph;
    
graph.paddingLeft   = 40.0f;
graph.paddingTop    = 30.0f;
graph.paddingRight  = 30.0f;
graph.paddingBottom = 50.0f;
        
[graph addPlot:barPlot];
        
graph.plotAreaFrame.masksToBorder = NO;
graph.plotAreaFrame.cornerRadius  = 0.0f;
graph.plotAreaFrame.borderLineStyle = borderLineStyle;
    
double xAxisStart = 0;
CPTXYAxisSet *xyAxisSet = (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *xAxis = xyAxisSet.xAxis;
CPTMutableLineStyle *lineStyle = [xAxis.axisLineStyle mutableCopy];
lineStyle.lineCap = kCGLineCapButt;
xAxis.axisLineStyle = lineStyle;
xAxis.majorTickLength = 10;
xAxis.orthogonalCoordinateDecimal   = CPTDecimalFromDouble(yAxisStart);
xAxis.paddingBottom = 5;
        
xyAxisSet.delegate = self;
xAxis.delegate = self;
xAxis.labelOffset = 0;
         
xAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic;

[plotSpace scaleToFitPlots:[graph allPlots]];
        
CPTMutablePlotRange *yRange = plotSpace.yRange.mutableCopy;
[yRange expandRangeByFactor:CPTDecimalFromDouble(1.3)];
plotSpace.yRange = yRange;
NSInteger xLength = CPTDecimalIntegerValue(plotSpace.xRange.length) + 1;
        
plotSpace.xRange = [CPTPlotRange
plotRangeWithLocation:CPTDecimalFromDouble(xAxisStart) 
   length:CPTDecimalFromDouble(xLength)] ;

编辑

埃里克的回答有所帮助。现在绘制了 x 标签,但在错误的 y 位置(偏移)。如何将它们绘制在 x 轴正下方(请参阅下面的屏幕截图):)。

谢谢!

【问题讨论】:

    标签: objective-c ios ios5 core-plot


    【解决方案1】:

    在缩放绘图空间后为坐标区设置orthogonalCoordinateDecimal。只是猜测,但用于定位 x 轴的 yAxisStart 值可能超出了缩放范围。

    【讨论】:

    • 埃里克,你的回答帮助了我:现在绘制了 x 轴的标签。但是,它们以不正确的 y 值绘制(我在我的问题中添加了两个屏幕截图)。如何将它们绘制在 x 轴的正下方?谢谢。
    • 最简单的方法是创建第二个 x 轴。将轴线和刻度线样式设置为nil 使其不可见,使用约束将其定位在绘图区域的底部,并将标签附加到第二个 x 轴而不是第一个。所有三个轴可以共享相同的绘图空间。关闭第一个 x 轴上的标签。
    • 我添加了第二个 x 轴(命名为 xLabelAxis)并按照您推荐的方式对其进行了配置。但是我怎样才能将它的约束设置在情节的底部(我仍然在努力理解 Core Plot 中约束的概念)。
    • xAxis2.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
    • AlexR - 解决此问题后的工作代码是什么?我也有同样的问题...
    【解决方案2】:

    我遇到了同样的问题,并通过在 (-1,-1) 的 (x,y) 值处添加另一个带有 lineWidth:0.0 和 clearColor 的图来修补它。 scaleToFit 包含此图并显示我的标签和轴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 2012-03-07
      相关资源
      最近更新 更多