Python 在Matplotlib寄生打印中旋转x轴标签

Python 在Matplotlib寄生打印中旋转x轴标签,python,matplotlib,Python,Matplotlib,在Thomas非常有帮助地解决了我在中绘制两个寄生虫子图的问题后,我现在尝试旋转子图上的x轴标签 不幸的是,我对示例代码的修改似乎对x轴标签没有影响: import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import host_subplot import mpl_toolkits.axisartist as AA host = host_subplot(111, axes_class=AA.Axes) plt.subplo

在Thomas非常有帮助地解决了我在中绘制两个寄生虫子图的问题后,我现在尝试旋转子图上的x轴标签

不幸的是,我对示例代码的修改似乎对x轴标签没有影响:

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

host = host_subplot(111, axes_class=AA.Axes)
plt.subplots_adjust(right=0.75)

par1 = host.twinx()
par2 = host.twinx()

offset = 60
new_fixed_axis = par2.get_grid_helper().new_fixed_axis
par2.axis["right"] = new_fixed_axis(loc="right",
                                    axes=par2,
                                    offset=(offset, 0))

par1.axis["right"].toggle(all=True)
par2.axis["right"].toggle(all=True)

host.set_xlim(0, 2)
host.set_ylim(0, 2)

host.set_xlabel("Distance")
host.set_ylabel("Density")
par1.set_ylabel("Temperature")
par2.set_ylabel("Velocity")

p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density")
p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature")
p3, = par2.plot([0, 1, 2], [50, 30, 15], label="Velocity")

par1.set_ylim(0, 4)
par2.set_ylim(1, 65)

host.legend()

host.axis["left"].label.set_color(p1.get_color())
par1.axis["right"].label.set_color(p2.get_color())
par2.axis["right"].label.set_color(p3.get_color())

plt.xticks(rotation = 45) #<- The only change from the example

plt.draw()
plt.show()  
导入matplotlib.pyplot作为plt
从mpl\u toolkits.axes\u grid1导入主机\u子批次
将mpl_toolkits.axisArtister作为AA导入
主机=主机\子地块(111,轴\类=AA.轴)
plt.子批次调整(右=0.75)
par1=host.twinx()
par2=host.twinx()
偏移量=60
新建固定轴=par2.获取网格辅助对象().新建固定轴
par2.轴[“右”]=新的固定轴(loc=“右”,
轴=par2,
偏移量=(偏移量,0))
par1.轴[“右”]切换(all=True)
par2.轴[“右”]切换(all=True)
host.set_xlim(0,2)
host.set_ylim(0,2)
host.set_xlabel(“距离”)
host.set_ylabel(“密度”)
par1.设置标签(“温度”)
par2.设置标签(“速度”)
p1,=主机图([0,1,2],[0,1,2],label=“Density”)
p2,=par1.绘图([0,1,2],[0,3,2],label=“Temperature”)
p3,=par2.绘图([0,1,2],[50,30,15],label=“Velocity”)
par1.set_ylim(0,4)
par2.set_ylim(1,65)
host.legend()
host.axis[“left”].label.set_color(p1.get_color())
par1.axis[“right”].label.set_color(p2.get_color())
par2.axis[“right”].label.set_color(p3.get_color())

plt.xticks(旋转=45)#产生寄生虫轴有两种方法:

  • 使用
    mpl\u工具包
    axisartist
    axes\u grid1
    包,示例如下

  • 使用通常的子地块和它们的脊椎。例如

这里您使用的是第一种方法,这可能有点不直观,因为它使用了
axisartist
工具包提供的特殊轴

解决方案1: 使用通常的子批次方法,所有工作都很好,例如

plt.setp(ax.get_xticklabels(), rotation=90)
解决方案2: 如果您想坚持使用
mpl_工具包
方法,您需要通过
轴[“右”]从
获取标签。主标签

plt.setp(par2.axis["bottom"].major_ticklabels, rotation=-135)

问题似乎是在
host\u子批中使用
AA.Axes
。否则,旋转将按预期进行(另请参见)。可能值得提交一个bug请求(我正在使用matplotlib 2.2.2,但仍然失败)似乎轴标签是通过使用寄生轴重新定义的,所以类似于
host.axis[“bottom”].axis.set_ticklebels(labels,rotation=45)
的东西应该是一个解决方案,尽管这对我来说并不适用。解决方案2 with
plt.setp(主机轴[“底部”]。主标签,旋转=45)
满足OP的要求。@EdSmith这两种解决方案都是问题的解决方案,因此得名。这两种方案都有效,但sol 2是OPs下轴现有代码中最简单的一种。即使使用
带棘的多个轴来生成绘图,旋转似乎也不适用于
plt.xticks
。关键似乎是使用
plt.setp
在这两种情况下,因为
set_ticklabels
不能直接工作。@EdSmith
plt的问题在于,无论什么
总是适用于当前活动的轴,因此需要先使该轴旋转标签以激活。
set_ticklabels
应该可以直接工作。解决方案2可能最容易实现ent提供了现有的代码,但从长远来看,当其他方法也无法使用正在使用的特殊轴时,可能会造成更多的麻烦。使用标准matplotlib轴可以更容易地找到合适的解决方案。非常好,谢谢。我使用了解决方案2,但在回答中,它旋转了一个y轴,而我正在尝试旋转x轴。同样的想法也适用,我只是将其更改为
plt.setp(host.axis[“bottom”].major\u ticklebels,rotation=90)