停止matplotlib 3D曲面图轴标签被截断
我正在写一段代码,用来模拟原子在电场和磁场中的相互作用。为了实现这个功能,我需要生成在特定高度下的三维图形。这段生成图形的完整代码很长,并且分散在几个模块中,但与绘图相关的部分是:
# 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
这个代码生成的图形示例如下:
你可以看到,坐标轴的标签和刻度看起来有点乱。特别是,我希望有人能告诉我怎么才能让图像底部不被截断(也就是说,确保1000这个数字能完整显示)。我在很多角度下都有这个问题,有时候坐标轴的标签被截断,有时候刻度被截断,但总的来说,Python打开的窗口似乎不够大,无法完整显示图形,扩大窗口后整个图像会缩放,导致标签和刻度仍然被截断。
任何帮助都非常感谢,请不要提到减小字体大小或去掉标签,因为这些内容是要放进报告里的,所以是固定的。
谢谢。
1 个回答
27
你可以通过设置一个“距离”来调整你图表的观看效果,比如说:
ax.dist = 13