停止 matplotlib 3D 曲面图的轴标签被截断

19
我正在编写一段代码,模拟原子在电场和磁场中的相互作用。其中需要我在给定高度处产生相互作用势能的三维图。完整的代码以生成这些图为目标,非常冗长,跨越了多个模块,但相关绘图部分如下:
# Function to plot 'PlotValues' at a height 'z'
def Plot_AtHeight(self, PlotValues, z=500, ReturnFig=False, ShowTime=False):

    # Calls out to the relevant function to calculate the values and return
    # these as an array
    PlotArray = self.Get_AtHeight(PlotValues, z)

    pylab.rcParams.update( \
        {'axes.labelsize': 18,
         'text.fontsize': 18,
         'xtick.labelsize': 18,
         'ytick.labelsize': 18
         })

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

    # Make the arrays of the points at which the values are calculated
    X, Y = np.mgrid[Xmin:Xmax:complex(0,Xpoints),
                   Ymin:Ymax:complex(0,Ypoints)]

    ax.plot_surface(X, Y, PlotArray, cmap=cm.jet)

    ax.set_xlabel('Position, x (nm)')
    ax.set_ylabel('Position, y (nm)')

    if PlotValues   == 'B':           ax.set_zlabel('Field Strength (G)',         fontsize=18)
    elif PlotValues == 'E':           ax.set_zlabel('Field Strength (V/m)',       fontsize=18)
    elif PlotValues == 'U_Stark':     ax.set_zlabel('Stark Interaction (J)',      fontsize=18)
    elif PlotValues == 'U_Zeeman':    ax.set_zlabel('Zeeman Interaction (J)',     fontsize=18)
    elif PlotValues == 'U':           ax.set_zlabel('Interaction Potential (J)',  fontsize=18)
    elif PlotValues == 'U_Stark_mK':  ax.set_zlabel('Stark Interaction (mK)',     fontsize=18)
    elif PlotValues == 'U_Zeeman_mK': ax.set_zlabel('Zeeman Interaction (mK)',    fontsize=18)
    elif PlotValues == 'U_mK':        ax.set_zlabel('Interaction Potential (mK)', fontsize=18)

    # If we are not in a time averaged environment then display the current
    # time (in ns) as the title to 1 decimal place.
    if not self.TimeAveraged and ShowTime:
        TimeStr = str(time*10**9)
        try:
            TimeTo1dp = '.'.join([TimeStr.split('.')[0], TimeStr.split('.')[1][0]])
        except:
            TimeTo1dp = TimeStr
        ax.set_title("t = %sns" % TimeTo1dp, fontsize=18)

    if not ReturnFig: pylab.show()
    elif ReturnFig: return fig 

此函数返回的图表示例如下: one of the plots created 您可以看到轴标签和刻度有点凌乱。特别是,我希望有人知道如何停止图像在底部被截断(即使所有1000都清晰可见)。我在很多角度上都遇到了这个问题,有时轴标签被截断,有时刻度被截断,但是Python打开以查看和保存图形的窗口似乎不够大,扩展它会缩放整个图像,因此标签/刻度仍然被截断。
如果您能提供任何帮助,将不胜感激,请不要提到减小字体大小或删除标签,因为这将用于报告,因此这些都是固定的。
谢谢。
1个回答

26
您可以通过以下代码为您的图表设置浏览“距离”:

ax.dist = 13

请注意,此处的代码仅为示例,您需要根据实际情况进行调整。

1
默认值为10。 - riyansh.legend
这个代码与 fig.gca(projection="3d") 结合使用时有效,而不是 ax = Axes3D(fig) - Mark Parris
4
dist 属性被弃用之后,可以使用以下代码:ax.set_box_aspect(aspect=None, zoom=0.8) - Dan M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接