我正在使用scatter和mplot3d函數繪製3D散點圖。我爲繪圖中的所有點選擇單一顏色,但當通過matplotlib繪製時,點的透明度將相對於距相機的距離設置。有什麼辦法可以禁用這個功能嗎?使用Python和matplotlib控制3D散點圖上的alpha值
我已經嘗試將alpha kwarg設置爲None/1,並將vmin/vmax設置爲1(試圖強制顏色縮放爲單色),但沒有運氣。在分散文檔中我沒有看到與此設置相關的任何其他可能的選項。
謝謝!
我正在使用scatter和mplot3d函數繪製3D散點圖。我爲繪圖中的所有點選擇單一顏色,但當通過matplotlib繪製時,點的透明度將相對於距相機的距離設置。有什麼辦法可以禁用這個功能嗎?使用Python和matplotlib控制3D散點圖上的alpha值
我已經嘗試將alpha kwarg設置爲None/1,並將vmin/vmax設置爲1(試圖強制顏色縮放爲單色),但沒有運氣。在分散文檔中我沒有看到與此設置相關的任何其他可能的選項。
謝謝!
沒有任何參數可以控制這個。這裏有一些破解方法。
禁用set_edgecolors
和set_facecolors
方法,使mplot3d無法更新顏色的alpha部分:如果你想set_edgecolors
和set_facecolors
方法再打
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()
,你可以備份這些兩種方法禁用它們之前:
s._set_facecolors, s._set_edgecolors = s.set_facecolors, s.set_edgecolors
如果你只wa nt來禁用阿爾法調整,您可以覆蓋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()
ax.scatter(x, y, z, depthshade=0)
這是正確的答案(對於最近的matplotlib版本) – 2017-02-27 10:20:50
這完美的作品。謝謝! – coderunner 2013-03-21 15:16:30
如果有編程解決方案可以稱爲「厚臉皮」.. :) – BenB 2016-11-21 01:31:16