Matplotlibを使った3Dチャートの描き方

Matplotlibを使った3Dチャートの描き方

  • 人工知能(AI)
6分で読めます 更新日 Jan 2, 2020

ポイント: Matplotlibを使用して3Dチャートを作成する方法を学び、重要な技術とコーディング例に焦点を当てます。チュートリアルには、3Dチャートの概念、制限、およびプロットを生成するためのサンプルコードが含まれています。

  • 3Dチャートの概念とコーディング例の概要。
  • プロット用のJupyterノートブックなどの環境を使用する重要性。

この記事では、Matplotlibを使って三次元のチャートを描く方法を示します。

Matplotlibでチャートを描くには、ZeppelinまたはJupyterノートブック(または別のグラフィカル環境)を使用する必要があります。別の選択肢として、後で表示するためにチャートをグラフィックスファイルに保存することもできます。これは、機械学習モデルのように、インタラクティブノートブックで実行するのに多くの分や時間がかかる長時間実行プログラムを実行している場合に特に便利です。

2Dチャートの紹介

基本概念の非常に簡単な説明から始めます。チャートの平面はデカルト平面として知られています。高校で、各点(x,y)がこのx-y平面上の点であることを覚えています。

例えば、45度の角度を持つ線のプロットはf(x)=y=xです。通常、y=f(x)と書いてxはyの関数を意味します。

一般的な曲線であるy = sin(x)をプロットしてみましょう。ここに行きます。

まず、滑らかなチャートを作成するために十分なデータポイントの配列を埋めます。特に、0.1ずつ離して-5から5の範囲に設定します:

    x = np.arange(-5,5,0.1)

残りのコードは簡単です。boは青い円を意味します。

コード

    import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))

x = np.arange(-5,5,0.1)
y = np.sin(x)

plt.plot(x,y,'bo')

さて、最初のチャートに3次元を加えましょう。

Matplotlibでの3Dチャート

まず、一つ注意点があります:人々は3Dチャートをあまり使用しません。主に、読者がチャートを理解するのが難しいためです。例えば、時間をx軸、yを縦軸にした2D時系列チャートは読みやすいですが、第三のzポイントを追加すると、空中に浮かぶようになり、しばしば塊のように見えて意味を把握するのが難しくなります。

ここでは、私たちの平らなサイン曲線を2D空間に置きます。これは技術的にはハイパープレーンと呼ばれ、第三の次元には次元がありません。

3D空間では、各座標は(x,y,z)として与えられます。微積分の授業では、座標系が次のように表現されるのを見慣れているでしょう:

点zはxとyの関数です。チャートの原則は同じですが、これらの矢印(軸)がボックスの中央に移動し、チャート空間を囲んでいます。目盛り(例:-2, -1, 0, 1, 2)は、これらの軸を囲むボックスに描かれ、原点には移動されていません。すなわち、(x=0,y=0,z=0)です。

zの矢印の方向は上、外、または横です。理解しやすい方向を選ぶだけです。

3Dチャートの例

ここにサンプルチャートがあります。平面デカルトに描いたのと同じサイン曲線を描きます。しかし、ここではzを定数値0に設定します。したがって、すべての点はハイパープレーン(x,y,0)上にあります。

これにより、3D空間の錯覚が生まれ、グラフが空中に浮かんでいるように見えます。3Dチャートを作成する目的は、視覚的なプレゼンテーションにもう一つの軸を追加することです。もちろん、人間は三次元以上の次元を見ることはできません。確かに四次元は見えません。

このチャートは曲線であるため、plot()を使用できます。ポイントが飛び跳ねていないからです。(もしそうであれば、おそらくscatter()を使用するでしょう。)

まず、キャンバスを3Dに設定します。このメソッドで軸オブジェクトにアクセスできます:

    from mpl_toolkits.mplot3d import Axes3D
ax = fig.gca(projection='3d')

ここで、zをzsとして0に設定します。したがって、これは(x,y,0)のプロットです。zdirは3Dの方向を意味します。デフォルトサイズは他の場合よりも小さすぎるかもしれません。

次に、plot()メソッドを使用できます:

    fig = plt.figure(figsize=(10,10))
ax.plot(x,y,'bo', zs=0, zdir='y')

ここに完全なコードがあります。残りのコードは原点、点(0,0,0)を中心に表示するために使いますので、見やすくなります。

    import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

x = np.arange(-5,5,0.1)
y = np.sin(x)
fig = plt.figure(figsize=(10,10))
ax = fig.gca(projection='3d')
ax.plot(x,y,'bo', zs=0, zdir='y')

origin = [0,0,0]
ax.text(origin[0],origin[0],origin[0],"origin",size=20)

ax.set_xlabel('X',labelpad=10,fontsize='large')
ax.set_ylabel('Y',labelpad=10,fontsize='large')
ax.set_zlabel('Z',labelpad=10,fontsize='large')

fig.show()

もちろん、データサイエンティストはほとんどの時間関数をプロットしているわけではありません。彼らは配列をプロットしています。しかし、関数を使用することが最も簡単な方法であるため、多くのプログラマーはそれに慣れています。

これらの投稿は私自身の意見であり、必ずしもBMCの立場、戦略、または意見を代表するものではありません。

人工知能(AI)の関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。