corePlot で対数スケール(logスケール)のグラフをつくる[iPhone][objective-c]
📅 December 16, 2014
•⏱️3 min read
概要
iPhoneアプリの開発でグラフ表示をする必要がありました。 様々なグラフのライブラリが存在する中、細かな調整ができて ライセンス的にも問題のないライブラリとしてcorePlotを選択しました。グラフの表示は、リニアスケールではなくて対数スケールで表示する必要がありましたので 検索したところ、日本語サイトでは見つけられず、英語サイトに方法がありました。
参考元サイト様
stackoverflow - How can I make semi-log graph in Core Plot?対数スケールにする
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace; plotSpace.xScaleType = CPTScaleTypeLinear; // this is the default plotSpace.yScaleType = CPTScaleTypeLog;引用元: stackoverflow - How can I make semi-log graph in Core Plot?
これだけです。簡単ですね。 対数スケールは、CPTScaleTypeLog 通常のリニアスケールは、CPTScaleTypeLinear x軸(xScaleType)とy軸(yScaleType)にそれぞれ設定すればおkです。 ちゃんとcorePlotさんは対数スケールを用意してました(これほどのライブラリならあって当然ですね♪)
レンジ設定に注意!
ここで一点要注意! 対数スケールにするx軸、y軸のレンジの設定に注意してください。//X軸のレンジを設定する x軸は対数スケールとする plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(100];
上例は、x軸について0を起点として100増加分までをレンジとする設定ですが、 対数スケールの場合に、レンジの起点を「0」や「-1」などの負の値を 入れると正しくグラフが表示されません。
//X軸のレンジ plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.1) length:CPTDecimalFromInt(100];
このように(小数点なので、CPTDecimalFromFloatにして)「0.1」とかにすると良いようです。 「0」を起点としたグラフはよくあるのでこれは落とし穴ですよね。 実際、私もハマりました。
おわりに
CPTXYPlotSpace ってなに?そもそもcorePlotの使い方がわからない という方は、corePlot について学んでみてください。 私は以下のサイト様を参考にしてグラフを作成しました。 ではでは。