Python matplotlib -> 3D гистограмма -> настройка положения метки, прозрачные полосы - PullRequest
5 голосов
/ 24 февраля 2012

Я пытаюсь создать гистограмму 3D-бара в Python, используя bar3d () в Matplotlib.

Я дошел до того, что я могу отобразить свою гистограмму на экране после передачи ей некоторых данных, но я застрял на следующем:

  1. Отображение меток осей правильно (в настоящее время пропускаются метки конечных (или начальных?) Тиков)
  2. Либо делайте отметки на каждой оси (например, для 'Mon'), либо укажите на соответствующую синюю полосу, либо поместите метку для отметки между основными отметками.
  3. Делаем прутья полупрозрачными.

изображение загруженного сюжета здесь

Я пытался передать несколько разных аргументов экземпляру 'ax', но у меня ничего не получалось, несмотря на то, что я подозревал, что неправильно понял, что ему предоставить. Я буду очень благодарен за любую помощь в этом.

Вот пример кода, над которым я работаю:

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

#from IPython.Shell import IPShellEmbed
#sh = IPShellEmbed()

data = np.array([
[0,1,0,2,0],
[0,3,0,2,0],
[6,1,1,7,0],
[0,5,0,2,9],
[0,1,0,4,0],
[9,1,3,4,2],
[0,0,2,1,3],
])

column_names = ['a','b','c','d','e']
row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']

fig = plt.figure()
ax = Axes3D(fig)

lx= len(data[0])            # Work out matrix dimensions
ly= len(data[:,0])
xpos = np.arange(0,lx,1)    # Set up a mesh of positions
ypos = np.arange(0,ly,1)
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)

xpos = xpos.flatten()   # Convert positions to 1D array
ypos = ypos.flatten()
zpos = np.zeros(lx*ly)

dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = data.flatten()

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b')

#sh()
ax.w_xaxis.set_ticklabels(column_names)
ax.w_yaxis.set_ticklabels(row_names)
ax.set_xlabel('Letter')
ax.set_ylabel('Day')
ax.set_zlabel('Occurrence')

plt.show()

1 Ответ

8 голосов
/ 27 февраля 2012

Чтобы сделать бары полупрозрачными, вам просто нужно использовать параметр альфа. альфа = 0 означает 100% прозрачность, а альфа = 1 (по умолчанию) означает 0% прозрачность.

Попробуйте, это сработает, чтобы сделать бары полупрозрачными:

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=0.5)

Относительно расположения тиков, вы можете сделать это, используя что-то вроде этого (первый список в plt.xticks или plt.yticks содержит «значения», где вы хотите найти тики, а второй список содержит то, что вы на самом деле хочу назвать галочки):

#ax.w_xaxis.set_ticklabels(column_names)
#ax.w_yaxis.set_ticklabels(row_names)

ticksx = np.arange(0.5, 5, 1)
plt.xticks(ticksx, column_names)

ticksy = np.arange(0.6, 7, 1)
plt.yticks(ticksy, row_names)

В итоге я получаю эту цифру: enter image description here

...