繁体   English   中英

matplotlib 3D 绘图的刻度标签位置

[英]tick label positions for matplotlib 3D plot

我正在尝试解决如何设置/更正 3D matplotlib 图的刻度标签位置。 刻度标签与刻度不对齐。 当需要许多刻度标签时,这个问题似乎特别突出。

我修改了 matplotlib 文档中的一个示例( http://matplotlib.org/examples/mplot3d/polys3d_demo.html )来说明我的问题。

from mpl_toolkits.mplot3d import Axes3D
from matplotlib.collections import PolyCollection
from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(10,10))
ax = fig.gca(projection='3d')

cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6)

xs = np.arange(0, 10, 0.4)
verts = []
zs = np.arange(50)
for z in zs:
    ys = np.ones(len(xs))*z
    ys[0], ys[-1] = 0, 0
    verts.append(list(zip(xs, ys)))

poly = PolyCollection(verts,facecolor='c')
poly.set_alpha(0.7)
ax.add_collection3d(poly, zs=zs, zdir='y')

ax.set_xlabel('X')
ax.set_xlim3d(0, 10)
ax.set_ylabel('Y')
ax.set_ylim3d(-1, len(zs))
ax.set_yticks(np.arange(len(zs)))
labels = {}
for l_c in zs:
    labels[l_c] = 'This Looks Bad'
ax.set_yticklabels(labels,rotation=-15)
ax.set_zlabel('Z')
ax.set_zlim3d(0, ys.max())

plt.show()

在此处输入图片说明

所以问题是:如何让刻度标签与刻度位置对齐?

通过使用这些对齐方式,我得到了更好的展示位置:

ax.set_yticklabels(labels,rotation=-15,
                   verticalalignment='baseline',
                   horizontalalignment='left')

我用较少的刻度标记修改了示例,以便您可以看到位置:

在此处输入图片说明

它们确实对齐,但水平位置以刻度为中心。 由于 3D 视图,这使得它们看起来比您期望的位置低一点。 效果与刻度的数量无关,而与宽度有关。

具体设置对齐方式会有所帮助。 尝试添加:

ax.set_yticklabels(labels,rotation=-15, va='center', ha='left')

尝试使用不同的对齐方式来查看您喜欢哪种对齐方式,我认为您在追求 ha='left'。

减少填充,与蜱的距离,也可能有所帮助。

在此处输入图片说明

您还可以在每个轴的 tick_params 选项中将 pad 参数设置为负数。 像这样:

    ax.tick_params(axis='x', which='major', pad=-3)

这可能有助于调整刻度标签和轴之间的距离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM