如何使用annotate()(或任何其他命令)在图的右侧添加第二个“ylabel”,使文本“scale”与其他文本相同(x轴, y-label和title)?使用缩放我的意思是我不想手动破解文本偏移或者只要我重新缩放图形/添加更多绘图/添加颜色条或类似的解决方案就会失败。我不想使用twinx,因为我没有绘制任何额外的数据,而且我不需要另一个轴。
这是我想要实现的目标的图像:
这是我生成此图片的代码,我想更改ax.annotate部分:
import numpy as np
import matplotlib.pyplot as plt
numPlotsY = 3
numPlotsX = 3
f, ax_grid = plt.subplots(numPlotsY,numPlotsX,sharex=True,sharey=True)
A = np.arange(numPlotsY)+1.0 # Amplitude
phi = np.arange(numPlotsX) # Phase shift
x = np.linspace(0,2.0,100) # x
for y_i in range(0,numPlotsY):
for x_i in range(0,numPlotsX):
ax = ax_grid[y_i,x_i]
y = A[y_i]*np.sin(x*np.pi + phi[x_i])
ax.plot(x,y,lw=2.0)
# Add xlabel to the left column
if x_i == 0:
ax.set_ylabel(r'$y$')
ax.set_yticks([-4,-2,0,2,4])
# Add ylabel below bottom row
if y_i == numPlotsY-1:
ax.set_xlabel(r'$x/\pi$')
ax.set_xticks([0.5,1.0,1.5])
# Add Phi label above top row
if y_i == 0:
ax.set_title(r'$\phi=%s$' % phi[x_i])
# Add amplitude label to the right... how??
if x_i == numPlotsX-1:
ax.annotate(r'$A=%d$' % A[x_i], xy=(1.1,0.5), rotation=90,
ha='center',va='center',xycoords='axes fraction')
f.subplots_adjust(wspace=0,hspace=0)
plt.suptitle(r'$A\cdot\sin\left(2\pi x + \phi\right)$',fontsize=18)
plt.show()
我已经多次讨论过这个话题而没有优雅的解决方案。总是涉及到很多黑客攻击。我真的认为这可以归结为matplotlib对待轴的方式。为什么不能为图的四边各有一个标签,其行为方式相同?