在matplotlib中的次要y轴上添加y轴标签


118

我可以使用将y标签添加到左侧的y轴plt.ylabel,但是如何将其添加到辅助y轴呢?

table = sql.read_frame(query,connection)

table[0].plot(color=colors[0],ylim=(0,100))
table[1].plot(secondary_y=True,color=colors[1])
plt.ylabel('$')

Answers:


231

最好的方法是axes直接与对象进行交互

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 *y1

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')

ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data', color='g')
ax2.set_ylabel('Y2 data', color='b')

plt.show()

示例图


如何获得像左轴一样的右y轴,我的意思是,从下到上,从0到5,对齐。
Sigur

如何在不重叠刻度线的情况下旋转蓝色文本?
Sigur

@Sigur,您必须将horizo​​ntalalignment和/或verticalalignment参数传递给ax2.set_ylabel
Paul H

@PaulH,我发现我们可以从ax1获取y限制并将其设置为ax2,因此标签的位置将对齐。
Sigur

@Sigur我不了解轴的限制和刻度与标签旋转如何相互作用,但是,如果您感到满意,那就快吧
Paul H

21

有一个简单的解决方案,不会弄乱matplotlib:只是熊猫。

调整原始示例:

table = sql.read_frame(query,connection)

ax = table[0].plot(color=colors[0],ylim=(0,100))
ax2 = table[1].plot(secondary_y=True,color=colors[1], ax=ax)

ax.set_ylabel('Left axes label')
ax2.set_ylabel('Right axes label')

基本上,当secondary_y=True给定选项时(即使ax=ax也传递了),它会pandas.plot返回不同的轴,我们将使用这些轴来设置标签。

我知道很早以前就已经回答了,但是我认为这种方法值得。


谢谢-很棒的方法!但是,值得注意的是,仅当您首先在主要y轴上绘制,然后在次要y轴上绘制时,此方法才起作用,就像您所做的那样。如果您切换顺序,则行为异常。
user667489

7

我目前无法使用Python,但最不可思议的是:

fig = plt.figure()

axes1 = fig.add_subplot(111)
# set props for left y-axis here

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.