8

Matplotlib で bar3d() を使用して、Python で 3D バー ヒストグラムを作成しようとしています。

いくつかのデータを渡した後、画面にヒストグラムを表示できるようになりましたが、次のことにこだわっています。

  1. 軸ラベルを正しく表示する (現在、最終 (または初期?) の目盛りラベルを見逃しています)
  2. 各軸の目盛り (たとえば、「月」) を作成して、対応する青いバーを指すか、主目盛りの間に目盛りラベルを配置します。
  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()
4

1 に答える 1

11

バーを半透明にするには、alpha パラメータを使用するだけです。alpha=0 は 100% の透明を意味し、alpha=1 (デフォルト) は 0% の透明を意味します。

これを試してみてください。バーを半透明にすることができます:

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

目盛りの場所については、次のようなものを使用して行うことができます (plt.xticks または plt.yticks の最初のリストには、目盛りを配置する「値」が含まれ、2 番目のリストには実際に呼び出したいものが含まれますダニ):

#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)

最終的に、私はこの図を取得します: ここに画像の説明を入力

于 2012-02-27T11:39:23.930 に答える