Управление значением альфа на 3D-графике с использованием Python и matplotlib

Я рисую график 3D-рассеяния, используя функцию разброса и mplot3d. Я выбираю один цвет для всех точек графика, но при рисовании matplotlib прозрачность точек устанавливается относительно расстояния от камеры. Есть ли способ отключить эту функцию?

Я пробовал установить альфа-kwarg в None / 1, а также установить vmin / vmax в 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() 

введите описание изображения здесь

Если вы хотите set_edgecolors set_facecolors методы set_edgecolors и set_facecolors , вы можете сделать резервную копию этих двух методов, прежде чем отключать их:

 s._set_facecolors, s._set_edgecolors = s.set_facecolors, s.set_edgecolors 

Если вы хотите отключить альфа-настройку, вы можете перезаписать функцию 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)