0

参照用にコア プロット グラフのスクリーンショットを提供するつもりでしたが、まだ (新規ユーザー) 許可されていないため、要求に応じて電子メールで送信できます。

x 値が 1 ~ 150、y 値が 300 ~ 450 の一連のデータ ポイントがあります。私がやりたいことは、これらのポイントをプロットし、きれいなグリッド オーバーレイを使用して、y 軸 (グラフの y 軸は 0 ではなく y min から開始し、y max に移動する必要があります) にズームインしますが、表示されている x は保持します。 - 参照用の軸。

私は自分が望むものを達成するのにかなり近づいていますが、まだいくつかのことに苦労しています.

まず、ユーザーに参照点を与えるために、y 軸と x 軸の交点、および y 軸の上部にある y 軸にラベルを付けたいと思います。

これを達成するために、主要なティック間隔をいじり、データセットに対していくつかの操作を実行して最大値と最小値を決定することから始めました。ただし、ズームインしようとすると (つまり、y-min と y max の間の範囲に焦点を合わせます)、x 軸が表示されなくなりました。

これを修正するために、ネット全体を検索した後、次のことを見つけました。

axisSet.xAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0];

これにより、x 軸が強制的に表示されるように見えますが、グラフが少しずれているようにも見えます...最初の y 軸の主要な目盛りと原点の間には 3 つの小さな目盛りしかなく、y 軸はありません原産地ラベル。

原点を最初の大目盛りにし、原点と y-Max の両方で y 軸のラベルを表示しながら、このオフセットを達成する方法を知っている人はいますか?

副次的な質問として、x 軸のラベルを float ではなく int として表示する方法を知っている人はいますか?

これまでに達成したことのソース コードを以下に示します。

ありがとう、

ブランドン

プロットを初期化するためのソース コード:

-(void)initialisePlot {

[self setDataMaxAndMins];

// Create a graph object which we will use to host just one scatter plot.
CGRect frame = [self.hostingView bounds];
self.graph = [[CPTXYGraph alloc] initWithFrame:frame];

// Add some padding to the graph, with more at the bottom for axis labels.
self.graph.plotAreaFrame.paddingTop = 50.0f;
self.graph.plotAreaFrame.paddingRight = 50.0f;
self.graph.plotAreaFrame.paddingBottom = 100.0f;
self.graph.plotAreaFrame.paddingLeft = 120.0f;

// Tie the graph we've created with the hosting view.
self.hostingView.hostedGraph = self.graph;

self.hostingView.backgroundColor = [UIColor blackColor];

// Create a line style that we will apply to the axis
CPTMutableLineStyle *axisStyle = [CPTMutableLineStyle lineStyle];
axisStyle.lineColor = [CPTColor grayColor];
axisStyle.lineWidth = 2.0f;


CPTColor * customGray = [CPTColor colorWithComponentRed:0.6f green: 0.6f blue: 0.6f alpha: 1.0f];
CPTMutableLineStyle *gridStyle = [CPTMutableLineStyle lineStyle];
gridStyle.lineColor = customGray;
gridStyle.lineWidth = 2.0f;

//Create plot symbol style
CPTMutableLineStyle * plotStyle = [CPTMutableLineStyle lineStyle];
plotStyle.lineColor = [CPTColor whiteColor];
plotStyle.lineWidth = 2.0f;

// Create a text style that we will use for the axis labels.
CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle];
textStyle.fontName = @"Helvetica";
textStyle.fontSize = 20;
textStyle.color = [CPTColor whiteColor];

// Create the plot symbol we're going to use.
CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol];
plotSymbol.lineStyle = plotStyle;
plotSymbol.size = CGSizeMake(3.0, 3.0);
//plotSymbol.


// Setup some floats that represent the min/max values on our axis.
float xAxisMin = xMin;
float xAxisMax = xMax + 5;
float yAxisMin = yMin;
float yAxisMax = yMax + 5;

// We modify the graph's plot space to setup the axis' min / max values.
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.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 *)self.graph.axisSet;

axisSet.xAxis.title = xAxisTitle;
axisSet.xAxis.titleTextStyle = textStyle;
axisSet.xAxis.titleOffset = 50.0f;
axisSet.xAxis.axisLineStyle = axisStyle;
axisSet.xAxis.majorTickLineStyle = axisStyle;
axisSet.xAxis.minorTickLineStyle = axisStyle;
axisSet.xAxis.labelTextStyle = textStyle;
axisSet.xAxis.labelOffset = 3.0f;
axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat((xAxisMax - xAxisMin) / 4);//CPTDecimalFromFloat(25.0f);
axisSet.xAxis.minorTicksPerInterval = 4;
axisSet.xAxis.minorTickLength = 5.0f;
axisSet.xAxis.majorTickLength = 7.0f;


axisSet.yAxis.title = [yAxisTitle stringByAppendingString: @" ($M)"];

axisSet.yAxis.titleTextStyle = textStyle;
axisSet.yAxis.titleOffset = 80.0f;
axisSet.yAxis.axisLineStyle = axisStyle;
axisSet.yAxis.majorTickLineStyle = axisStyle;
axisSet.yAxis.minorTickLineStyle = axisStyle;
axisSet.yAxis.labelTextStyle = textStyle;
axisSet.yAxis.labelOffset = 3.0f;
axisSet.yAxis.majorIntervalLength = CPTDecimalFromFloat((yAxisMax - yAxisMin) / 4);
axisSet.yAxis.minorTicksPerInterval = 4;
axisSet.yAxis.minorTickLength = 5.0f;
axisSet.yAxis.majorTickLength = 7.0f;

CPTColor * customLighterBlue = [CPTColor colorWithComponentRed:0.0f green: 0.0f blue: 0.4f alpha: 1.0f];
CPTColor * customDarkBlue = [CPTColor colorWithComponentRed:0.0f green: 0.0f blue: 0.3f alpha: 1.0f];
axisSet.xAxis.alternatingBandFills = [NSArray arrayWithObjects:customLighterBlue, customDarkBlue, nil];

axisSet.xAxis.majorGridLineStyle = gridStyle;

axisSet.yAxis.majorGridLineStyle = gridStyle;

axisSet.xAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0];


// Add a plot to our graph and axis. We give it an identifier so that we
// could add multiple plots (data lines) to the same graph if necessary.
CPTScatterPlot *plot = [[CPTScatterPlot alloc] init];
plot.dataSource = self;
plot.identifier = @"mainplot";
plot.dataLineStyle = nil;
plot.plotSymbol = plotSymbol;
[self.graph addPlot:plot];

//[_graph.defaultPlotSpace scaleToFitPlots:[_graph allPlots]];

}

4

1 に答える 1