Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python Matplotlibのサーフェスプロットで色を変更し、グリッド線を追加する方法

PythonのMatplotlibで作成した3Dサーフェスプロット(曲面図)の色を変更し、メッシュ状のグリッド線を追加したい場合、以下の手順で実現できます。

実装手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。

  • numpyを使用して、xyhのデータポイントを生成します。

  • plt.figure()で新しい図を作成するか、既存の図をアクティブにします。

  • 手順3で作成したfigureから、3D用のAxesオブジェクトを取得します。

  • plot_surface()を使って、面の色・エッジの色・線幅を指定したサーフェスプロットを作成します。ここでは面をオレンジ系の色(orangered)、エッジを黄色に設定することで、格子状のグリッド線が視覚的に強調されます。

コード例

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

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = np.arange(-5, 5, 0.25)
y = np.arange(-5, 5, 0.25)

x, y = np.meshgrid(x, y)
h = np.sin(x)*np.cos(y)

fig = plt.figure()

ax = Axes3D(fig)
ax.plot_surface(x, y, h, rstride=10, cstride=10, color='orangered', edgecolors='yellow', lw=0.6)

plt.show()

解説

このコードでは、np.meshgrid()によって生成した2次元グリッド上で sin(x) * cos(y) の値を計算し、波打つような3D曲面を描画しています。

ポイントとなる引数は以下の通りです。

  • rstride / cstride: 行方向・列方向の描画間隔を指定します。値を大きくするとメッシュが粗くなり、グリッド線がはっきりと見えます。

  • color: 曲面自体の塗りつぶし色を指定します(ここでは 'orangered')。

  • edgecolors: 各面の境界線(グリッド線)の色を指定します(ここでは 'yellow')。この色のコントラストにより、グリッド線が明瞭に表示されます。

  • lw: エッジ線の太さ(linewidth)です。細すぎると見えにくいため、0.6程度が視認性に適しています。

なお、最近のMatplotlibバージョンでは Axes3D(fig) の代わりに fig.add_subplot(projection='3d') を使う方法が推奨されています。

出力結果

Python Matplotlibのサーフェスプロットで色を変更し、グリッド線を追加する方法

  1. Matplotlibのループプロットでマーカーとラインに同じ色を設定する方法

    Matplotlibでループ処理により複数のデータ系列を描画する際、「マーカー」と「ライン」に同じ色を割り当てたい場面はよくあります。本記事では、そのための基本的な手順と、色を確実に揃えるための実践的な方法をコード例とともに解説します。 基本の手順 numpy を使用して m、n、x のデータポイントを初期化します。 figure() メソッドで新しい図を作成、または既存の図をアクティブ化します。 clf() メソッドで図をクリアします。 subplot() メソッドで現在の図にサブプロットを追加します。 itertools.cycle を利用して、複数種類のマーカーを順番に取得できるよう

  2. Python Matplotlibで3Dグラフをプロットする方法を解説

    PythonのMatplotlibを使えば、3次元の散布図やグラフを簡単に描画できます。この記事では、mpl_toolkits.mplot3dモジュールを利用して3Dグラフを作成する手順を、サンプルコード付きでわかりやすく解説します。 3Dグラフをプロットする基本手順 Pythonで3Dグラフを描くには、以下のステップに従います。 figure()メソッドを使って、新しい図(フィギュア)を作成するか、既存の図をアクティブにします。 Axes3Dオブジェクトを取得して、3D用の座標軸を準備します。 x、y、zそれぞれのデータポイントをリストとして定義します。 scatter3D()メソッドを使