Управление значением альфа на 3D-графике с использованием Python и matplotlib
Я рисую график 3D-рассеяния, используя функцию разброса и mplot3d. Я выбираю один цвет для всех точек графика, но при рисовании matplotlib прозрачность точек устанавливается относительно расстояния от камеры. Есть ли способ отключить эту функцию?
Я попытался установить альфа-kwarg в None/1, а также установить vmin/vmax в 1 (в попытке заставить масштабирование цвета быть сплошным одиночным цветом) без везения. Я не видел никаких других возможных вариантов, связанных с этим параметром в документации по разбросу.
Спасибо!
Ответы
Ответ 1
Нет аргументов, которые могли бы контролировать это. Вот несколько способов взлома.
Отключить метод 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()
![enter image description here]()
Если вы хотите использовать методы set_edgecolors
и set_facecolors
позже, вы можете сделать резервную копию этих двух методов перед их отключением:
s._set_facecolors, s._set_edgecolors = s.set_facecolors, s.set_edgecolors
Ответ 2
Если вы хотите отключить альфа-настройку, вы можете перезаписать функцию 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()
Ответ 3
ax.scatter(x, y, z, depthshade=0)