host_subplots的Axis tick标签对齐方式

时间:2016-11-29 12:49:24

标签: python matplotlib

在创建具有多个垂直轴(沿着http://matplotlib.org/examples/axes_grid/demo_parasite_axes2.html的线)的图形时,我试图在水平轴上旋转标签。但是,应该做的代码似乎没有做任何事情。

例如:

from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt

num_sub_axes = 3

host = host_subplot(111, axes_class=AA.Axes)
plt.subplots_adjust(left=0.05, right=max(0.75, 1-0.075*num_sub_axes))
host.axis["left"].toggle(all=False)

for sub_ax_idx in range(num_sub_axes):
    new_ax = host.twinx()

    new_fixed_axis = new_ax.get_grid_helper().new_fixed_axis
    new_ax.axis["right"] = new_fixed_axis(loc="right", axes=new_ax, offset=(45 * sub_ax_idx, 0))
    new_ax.axis["right"].toggle(all=True)

    line, = new_ax.plot([0, 1, 2], [(sub_ax_idx+1)**2, (sub_ax_idx+1)**2.5, (sub_ax_idx+1)**3], label=str(sub_ax_idx))

    new_ax.axis["right"].label.set_color(line.get_color())
    new_ax.axis["right"].major_ticklabels.set_color(line.get_color())
    new_ax.axis["right"].minor_ticklabels.set_color(line.get_color())

host.set_xticks([0, 1, 2])
host.set_xticklabels(["One", "Two", "Three"], rotation=-45, horizontalalignment="right", verticalalignment="bottom")

host.legend()
plt.draw()
plt.show()

这将创建如下图形: example graph

请注意,水平标签(" One"," Two"," Three")显然是水平的,即使我使用了rotation=-45在我对set_xticklabels的调用中的关键字参数,如文档中所述:http://matplotlib.org/devdocs/api/_as_gen/matplotlib.axes.Axes.set_xticklabels.html

我怀疑这可能与这不仅仅是常规axes对象这一事实有关。

但如果不是如上所述,我该如何旋转这些标签?

1 个答案:

答案 0 :(得分:0)

在您的情况下,轴不再是法线轴,而是axisartist container内的轴。正如Goyo在一个加权注释中指出的那样,这个容器的方法可能与普通轴方法不同。

在这种情况下,您需要设置主要刻度标签的旋转

host.axis["bottom"].major_ticklabels.set_rotation(-45)