2015-02-19 3 views
3

В настоящее время я занимаюсь 3D-графиками в Python 2.7.9 с использованием Matplotlib 1.4.3. (Извините, мой рейтинг еще не позволяет мне прикреплять фотографии). Я хотел бы переключить данные осей x и z (как в примере кода), но затем также сопоставить цветную панель с осью x, а не с осью z.Matplotlib 3d plot - связать цветную панель с другой осью

import pylab as py 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import axes3d 
import matplotlib as mpl 
from matplotlib import cm 

# Create figure and get data 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
X, Y, Z = axes3d.get_test_data(0.05) 

# Plot surface and colorbar 
c1 = ax.plot_surface(Z, Y, X, rstride=8, cstride=8, alpha=0.9, cmap='PiYG_r') 
cbar = plt.colorbar(c1) 

# Labels 
ax.set_xlabel('X') 
ax.set_xlim3d(-100, 100) 
ax.set_ylabel('Y') 
ax.set_ylim3d(-40, 40) 
ax.set_zlabel('Z') 
ax.set_zlim3d(-40, 40) 

plt.show() 

При переключении данные Х- и Z-оси на этой стадии, то Colorbar понятно также автоматически изменяется в соответствии с новые значения Z-оси (первоначально значения оси Х), так как оно связано с только z-переменная. Есть ли способ манипулировать этим в python, чтобы цветная панель ассоциировалась с одной из других осей (оси x или y)?

Я пробовал посмотреть документацию по цвету. В настоящее время я подозреваю, что функция config_axis() может выполнить эту работу, но нет текста, объясняющего, как он используется (http://matplotlib.org/api/colorbar_api.html).

Заранее спасибо.

С уважением

Франсуа

ответ

5

Вы должны использовать facecolors вместо cmap и для вызова colorbar мы должны создать назначаемый объект с помощью ScalarMappable. Этот код здесь работал для меня.

import pylab as py 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import axes3d 
import matplotlib as mpl 
from matplotlib import cm 

# Create figure and get data 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
X, Y, Z = axes3d.get_test_data(0.05) 

N = (Z-Z.min())/(Z-Z.min()).max() 

# Plot surface and colorbar 
c1 = ax.plot_surface(Z, Y, X, rstride=8, cstride=8, alpha=0.9, facecolors=cm.PiYG_r(N)) 

m = cm.ScalarMappable(cmap=cm.PiYG_r) 
m.set_array(X) 
cbar = plt.colorbar(m) 


# Labels 
ax.set_xlabel('X') 
ax.set_xlim3d(-100, 100) 
ax.set_ylabel('Y') 
ax.set_ylim3d(-40, 40) 
ax.set_zlabel('Z') 
ax.set_zlim3d(-40, 40) 

plt.show() 
+0

Спасибо @plonser. Это сработало отлично. Цените помощь. – Francois

Смежные вопросы