18

関数scatterとmplot3dを使用して3D散布図をプロットしています。プロット内のすべてのポイントに単一の色を選択していますが、matplotlibで描画すると、ポイントの透明度はカメラからの距離を基準にして設定されます。この機能を無効にする方法はありますか?

alphakwargをNone/1に設定し、vmin / vmaxを1に設定してみました(カラースケーリングを強制的に単色にするため)。スキャッターのドキュメントには、この設定に関連する他の可能性のあるオプションはありませんでした。

ありがとう!

4

3 に答える 3

17

Matplotlib 1.4+ の場合、@fraxel によって以下に提供される回答が最良の解決策です:ax.scatter引数を指定して呼び出しますdepthshade=False

これを制御できる引数はありません。ここにいくつかのハック方法があります。

メソッドを無効set_edgecolorsにしset_facecolorsて、mplot3d が色のアルファ部分を更新できないようにします。

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

fig = plt.figure()
ax = fig.gca(projection='3d')

x = np.random.sample(20)
y = np.random.sample(20)
z = np.random.sample(20)
s = ax.scatter(x, y, z, c="r")
s.set_edgecolors = s.set_facecolors = lambda *args:None

ax.legend()
ax.set_xlim3d(0, 1)
ax.set_ylim3d(0, 1)
ax.set_zlim3d(0, 1)

plt.show()

ここに画像の説明を入力

後で呼び出しset_edgecolorsset_facecolorsメソッドが必要な場合は、これら 2 つのメソッドを無効にする前にバックアップできます。

s._set_facecolors, s._set_edgecolors = s.set_facecolors, s.set_edgecolors
于 2013-03-21T06:28:31.340 に答える
6

アルファ調整のみを無効にする場合は、zalpha 関数を上書きできます。これにより、インタラクティブ プロットの場合に色を更新し、深度フォグを除去することができます。

from mpl_toolkits.mplot3d import *
import numpy as np
import matplotlib.pyplot as plt
plt.ion()

art3d.zalpha = lambda *args:args[0]

fig = plt.figure()
ax = fig.gca(projection='3d')

x = np.random.sample(20)
y = np.random.sample(20)
z = np.random.sample(20)
s = ax.scatter(x, y, z, c="r")

ax.legend()
ax.set_xlim3d(0, 1)
ax.set_ylim3d(0, 1)
ax.set_zlim3d(0, 1)

plt.show()
于 2013-09-16T02:29:13.470 に答える