Python matplotlib - > 3D条形图 - >调整刻度标签位置,透明条

时间:2012-02-24 15:24:28

标签: python matplotlib transparency axes

我正在尝试使用Matplotlib中的bar3d()在Python中创建3D条形直方图。

我已经到了可以在传递一些数据后在屏幕上显示我的直方图的地步,但我坚持以下内容:

  1. 正确显示轴标签(目前错过最终(或初始?)刻度标签)
  2. 在每个轴上制作刻度(例如“Mon”的刻度)要么指向相应的蓝色条,要么在主要刻度线之间定位刻度标签。
  3. 使酒吧半透明。
  4. image of plot uploaded here

    我已经尝试将几个不同的参数传递给'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 个答案:

答案 0 :(得分:8)

要使条形变为半透明,您只需使用alpha参数即可。 alpha = 0表示100%透明,而alpha = 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