機械学習などの多くのデータを扱う際に避けては通れないデータビジュアライズですが、Pythonで行うにはどうすればいいのか。ということで、matplotlibというライブラリを用いて3次元プロットの描き方について解説していきます。

2次元で散布図を描きたい方はこちら

【matplotlib】Pythonでデータを可視化する(散布図編)

matplotlibとは

プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像(各種ベクトル画像形式も含む)として保存することもできる(Wiki参照)

ということで、2次元及び3次元のグラフをさくっとプロットできる非常にありがたいライブラリです。ちなみに、このロゴもmatplotlibで描いているものです。

 

基本ソース

では、最低これだけあればグラフが書けるというコードを以下に示します。

本来ならnumpy等を導入し、ランダムポイントを生成して散布図らしくプロットする方が見栄えも良いかと思いますが、急にいろんなものを入れてプログラムが複雑そうに見えてしまうとどれがプロットに必要なのか不明瞭になると思ったので出来るだけ簡素にしています。

この中で、以下の選択状態にしている箇所が3次元プロットを行うために必要になる所です。

 

プログラムを起動すると以下のグラフが表示されます。それぞれ一つ目のポイントは(x[0], y[0], z[0])にプロットしてくれるため(1,1,1)となり、そのあとも同じインデックス同士の(2,8,5)、(3,3,3)、(4,6,8)、(5,5,9)とプロットされていきます。

問題なくプロットされていますね。ちなみに、3次元プロットになってからこの表示されたグラフにも特別な機能が付きます。なんと、ドラッグで回ります。

はい、どうでもいいですね。失礼しました。では、次項で見た目をカスタマイズしていきます。

 

Tips:記述の違い(ちょっと寄り道)

いろんなサイトを調べてると以下のコードを結構見かけます。

これについて少し調べてみたところ、以前(v1.0.0)は使われていたもので、最近のバージョンではあまり推奨されてないやり方との事でした。よって、この記述を見た際は古い方法で今matplotlibを使うときは先に示した方法なんだなと思ってもらえれば問題ないかと思います。

 

プロットの見た目をいじる

マーカーの色と形の変更し、凡例を付けるためにプログラムを修正します。

この中で、以下の選択状態にしている箇所が先ほどから変更した場所です。

 

実際に、プログラムを動かすと以下のようにプロットの見た目が変化します。

次項ではグラフ全体のカスタマイズとしてX軸Y軸のラベルを入れていきます。

 

Tips:主要なカスタマイズキーワード

最低限これだけおさえてれおけば、ある程度見た目にこだわったグラフは書けるかなという範囲のみ記載しておきます。もっと細かく知りたい方はmatplotlibの公式HPへどうぞ。

kywd 入力例 備考
x,y,z [1,2,3,4,5] または 事前に定義したlistなど array形式のもの
※必須
s s=5 または
x,yと同範囲のリスト(要素はサイズ)
マーカーの大きさ
指定しないと20
c c=”red” または
c=”#FFFF00″ または
c=(1.0,0,1.0)
マーカーの色
色名や16進数、RGBでの指定が可能
marker marker=”.” マーカーの形
指定しないと○
*は星形など様々指定可
alpha alpha=0.3 マーカーの透明度
指定は0-1の間で行う
linewidths linewidths=2 マーカーの枠線の幅
label label=”label1″ 凡例名

色と形については、リファレンスを見ると以下のものが用意されています。

 

色見本

color example code: named_colors.py — Matplotlib 2.0.2 documentation

マーカー見本


lines_bars_and_markers example code: marker_reference.py — Matplotlib 2.0.2 documentation

 

グラフの見た目をいじる

X軸に「X」、Y軸に「Y」などそれぞれの軸にラベルを付けるためにプログラムを修正します。

先ほどと同様にこの中で、以下の選択状態にしている箇所が変更した場所です。

実際のグラフが以下のものです。

次の最後の項ではに2次元のグラフとの組み合わせができるかを試します。

【応用】一つのグラフに折れ線と3D散布図を重ねる

実は、一つのグラフに複数のプロットを記述するのは難しくありません。実際にやってみます。あまり深く考えずにプログラムを追記してみましょう。

このように、同じグラフにプロットするだけなら一行追加するだけでいいんですね。2次元と3次元の組み合わせでも問題なく動作します。

いかがでしたか?出来るだけ少ない情報で、最低限プロットができるように書かせていただきました。参考にしていただけると幸いです。シェア等よろしくお願い致します。


1 のコメント

  1. ピンバック: 【matplotlib】Pythonでデータを可視化する(散布図編) | 趣味で始める機械学習

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です