Python 在matplotlib中将多个面板上的绘图的标签排列在一行中
我目前正在绘制(使用Python-x,y2.7.2.1)和几个子图,我希望所有的y标签都在一行中。目前它们不是,因为记号标签的大小不同。作为演示,我添加了以下脚本:Python 在matplotlib中将多个面板上的绘图的标签排列在一行中,python,matplotlib,label,axis-labels,Python,Matplotlib,Label,Axis Labels,我目前正在绘制(使用Python-x,y2.7.2.1)和几个子图,我希望所有的y标签都在一行中。目前它们不是,因为记号标签的大小不同。作为演示,我添加了以下脚本: import pylab as P import numpy as N x = N.linspace(0,2*N.pi,10000) y1 = N.sin(x) y2 = N.cos(x)*10000 P.figure() ax1 = P.subplot(211)
import pylab as P
import numpy as N
x = N.linspace(0,2*N.pi,10000)
y1 = N.sin(x)
y2 = N.cos(x)*10000
P.figure()
ax1 = P.subplot(211)
P.plot(x,y1,"k-")
y1 = P.ylabel("$\\sin{(x)}$")
P.xlim((0,2*N.pi))
ax2 = P.subplot(212)
P.plot(x,y2,"k--")
y2 = P.ylabel("$\\cos{(x)}\\cdot{}10^4$")
P.xlim((0,2*N.pi))
P.show()
结果如下所示,请注意相互移动的标签:
我试图通过使用设置标签位置
(x,y) = y2.get_position()
ax1.yaxis.set_label_coords(x,y)
但显然,它们使用不同的坐标系,因为set_label_coords需要相对坐标,而get_position()似乎可以产生像素或其他东西。尝试使用
y1.set_x(x); y1.set_y(y)
没有任何效果。于是我对自己说:去问一位专家——我来了。有谁能告诉我如何改变标签,使它们彼此排成一行,看起来和预期的一样棒吗
我期待您的回答。您可以用
P.ylabel("$\\sin{(x)}$", labelpad=20)
及
经过一些调整,这应该会达到你想要的。您甚至可以在绘图后使用
ax.yaxis.labelpad = 20
y
标签未正确对齐,因为y
轴上的数字长度发生变化,并移动标签位置。您可以使用以下命令在y
轴上固定数字的大小:
from matplotlib.ticker import FuncFormatter
def thousands(x, pos):
'The two args are the value and tick position'
return '%4.1f' % (x*1e-3)
formatter = FuncFormatter(thousands)
ax = fig.add_subplot(211)
ax.yaxis.set_major_formatter(formatter)
这将保证y
轴上的数字长度始终为4个字符,因此您可以修复所有值的y
标签的偏移量。更改此函数的数千()
函数中返回的字符串不会让您满意
编辑
实现这一点的另一种方法是使用
我刚刚发现了这个方法,它可能对你有一些用处!(0,0)是(左,下),(0.5,0.5)是(中,中)等。正如danodonovan所说,设置标签坐标是一种可能的方法。我可以补充一点,这个设置对我来说很好
ax7.yaxis.set_label_coords(-0.2, 0.5)
“诀窍”是使用负数将标签移到绘图之外 实际上,我在我的特定程序中是这样做的,x标签没有问题。我把这个放在这里是为了保持简单。出于某种原因,这张照片刚刚出现在我的帖子中(令人毛骨悚然,不是吗?)。因此,我想实现的是,y1和y2标签共享相同的左边框,而不是与右侧记号标签的距离相同。抱歉,我不知道如何说得更清楚,我不是母语人士。抱歉误解,我已经修改了我的回答。嘿,没问题@danodonovan。我很感激能得到的任何帮助!IMO
P.subplot()
的作用与图add\u subplot()的作用相同。正如您在上图中所看到的,y标签不在一条直线上,图形是。我在寻找一种方法,不仅可以对齐图形,还可以对齐y标签。在添加子图将211
更改为121
等。哦,我希望绘图按原样排列,但是的,这是解决问题的一种可能性(:我希望标签相对于左图像边框左对齐;但据我所知,它们有自己的bbox,它们会粘在上面,我无法让它们以一种讨人喜欢的方式移动……非常正确,matplotlib“howto”也是这样处理的:
ax.yaxis.set_label_coords(0.5, 0.5)
ax7.yaxis.set_label_coords(-0.2, 0.5)