Skip to content

corePlot で対数スケール(logスケール)のグラフをつくる[iPhone][objective-c]

  • tips

📅 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 について学んでみてください。 私は以下のサイト様を参考にしてグラフを作成しました。   ではでは。  
← PrevNext →