【问题标题】:Coreplot iphone setting correct axis and crossover pointCoreplot iphone设置正确的轴和交叉点
【发布时间】:2012-02-01 21:00:43
【问题描述】:

我正在为 iPhone 使用 CorePlot。我可以做一个简单的图表就好了。但我想做的是让y轴从0-100开始,x轴从1998年到2007年。如果可能的话,我想保留这个数字(不是基于自定义文本的标签)。

问题在于,当您设置这些轴时:

// We modify the graph's plot space to setup the axis' min / max values.
float xAxisMin = 1998
float xAxisMax = 2007;
float yAxisMin = 0;
float yAxisMax = 100;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromFloat(xAxisMax - xAxisMin)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)];

// Modify the graph's axis with a label, line style, etc.
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;

axisSet.xAxis.title = @"";
axisSet.xAxis.titleTextStyle = textStyle;
axisSet.xAxis.titleOffset = 10.0f; 
axisSet.xAxis.axisLineStyle = lineStyle;
axisSet.xAxis.majorTickLineStyle = lineStyle;
axisSet.xAxis.minorTickLineStyle = lineStyle;
axisSet.xAxis.labelTextStyle = textStyle;
axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat(1000.0f);
axisSet.xAxis.labelOffset = 1.0f;
axisSet.xAxis.minorTicksPerInterval = 1;
axisSet.xAxis.minorTickLength = 5.0f;
axisSet.xAxis.majorTickLength = 7.0f;

你会得到一个图表,它显示 y 轴从 0 到 100,然后 x 轴从 1998 年左右开始向右。即他们的图表在 X: 1998 y: 0 处没有交叉。有没有办法强制它这样做?据我所知,我必须做一个 x 轴范围为 0-2007 和 y 轴范围为 0-100 的图表。那我可以告诉它剪掉 0-1997 的那块,然后移到 0 处吗?

另一种方法是使用自定义点。我试过了。但似乎存在一个问题,它没有在图表线上显示刻度线。例如,如果我按照源代码中的示例进行操作,我可以看到 1998、1999、2000 等,但看不到 |线穿过 x 轴。就像我使用的是自定义线,所以不会绘制刻度线。

感谢大家的帮助,

-大卫

【问题讨论】:

  • 我知道这个链接:stackoverflow.com/questions/2054727/… 我只需要将它移动到 X(向左)方向而不是 Y。
  • 如果我这样做:axisSet.yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:150];然后它将 yAxis 移动到右侧,但场景随后移到屏幕的右侧并且几乎不可见.. 不是真正的解决方案..

标签: iphone core-plot


【解决方案1】:

使用orthogonalCoordinateDecimal 属性:

axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(yAxisMin);
axisSet.yAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(xAxisMin);

【讨论】:

  • 这是正确的答案,但我需要的部分是我昨晚想出来的。如果您只使用其中之一(仅限 y),则视图不会“移动”以使它们对齐。您必须使用上述语句将 xAxis 设置为某个位置(在我的情况下为 0)。这会锁定视图。然后用上面的 yAxis 语句把左边的那个带进来。这将使它们一起移动。如果您不同时使用它们,它们会聚在一起,但视图不会移动以将它们保持在可见区域中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多