Python 如何确保图例不会与右侧Y轴上的标签重叠
请帮我查一下下面的代码 我要确保:Python 如何确保图例不会与右侧Y轴上的标签重叠,python,matplotlib,legend,axis,axes,Python,Matplotlib,Legend,Axis,Axes,请帮我查一下下面的代码 我要确保: 轴线保持垂直 图例显示在轴的右侧,并且必须位于轴的外部 图例不能与y轴标签重叠 必须使用函数“添加子批次”来创建子批次,不能使用其他函数(例如twinx…) 我想我们需要计算y轴标签的边界,但我不知道怎么做。 或者有没有其他方法可以自动完成 以下是我的代码: 将numpy作为np导入 将matplotlib.pyplot作为plt导入 x1=np.arange(10) x2=x1*10 y1=x1*2 y2=x1*10000 def调整子批次布局(图): 对
将numpy作为np导入
将matplotlib.pyplot作为plt导入
x1=np.arange(10)
x2=x1*10
y1=x1*2
y2=x1*10000
def调整子批次布局(图):
对于图轴中的ax:
x0,x1=ax.get_xlim()
y0,y1=ax.get_ylim()
ax.set_纵横比((x1-x0)/(y1-y0))
def squarify(图):
调整子地块布局(图)
图=plt.图(图尺寸=(16,4))
loc_val=“右上角”
bbox_锚=(1.15,1)
ax1=图add_子批次(2,2,1)
ax2=fig.add_子批次(2,2,1,frameon=False,sharex=ax1)
lg1=ax1.绘图(x1,y1,label='ax1')
lg2=ax2.绘图(x2,y2,标签='ax2',颜色='tab:red')
ax2.get_yaxis().设置标记位置('right')
ax1.勾选参数(axis='x',labelcolor='tab:blue')
ax1.勾选参数(轴为y,标签颜色为tab:red)
ax2.勾选参数(轴为y,标签颜色为tab:red)
lga=lg1+lg2
labs=[l.获取lga中l的标签()
ax1.图例(lga、实验室、loc=loc\U val、bbox\U至\U锚定=bbox\U锚定)
ax1.set_ylabel(“ax1 ylabel”)
ax2.set_ylabel(“ax2 ylabel”)
ax2.get_yaxis().设置标签位置(“右”)
ax3=图add_子批次(2,2,2)
ax4=图add_子批次(2,2,2,frameon=False,sharex=ax3)
lg3=ax3.绘图(x1,y1,label='ax3')
lg4=ax4.绘图(x2,y2,标签='ax4',颜色='tab:red')
ax4.get_yaxis().设置标记位置('right')
ax3.勾选参数(axis='x',labelcolor='tab:blue')
ax3.勾选参数(轴为y,标签颜色为tab:red)
ax4.勾选参数(轴为y,标签颜色为tab:red)
lgb=lg3+lg4
labs=[l.get_label()表示lgb中的l]
ax3.图例(lgb、实验室、loc=loc_val、bbox_至_锚定=bbox_锚定)
ax3.set_ylabel(“ax3 ylabel”)
ax4.set_ylabel(“ax4 ylabel”)
ax4.get_yaxis().设置标签位置(“右”)
ax5=图add_子批次(2,2,3)
ax6=图add_子批次(2,2,3,frameon=False,sharex=ax5)
lg5=ax5.绘图(x1,y1,标签='ax5')
lg6=ax6.绘图(x2,y2,标签='ax6',颜色='tab:red')
ax6.get_yaxis().设置标记位置('right')
ax5.勾选参数(axis='x',labelcolor='tab:blue')
ax5.勾选参数(轴为y,标签颜色为tab:red)
ax6.勾选参数(轴='y',标签颜色='tab:red')
ax6.get_yaxis().设置标签位置(“右”)
lgc=lg5+lg6
labs=[l.get_label()表示lgc中的l]
ax5.图例(lgc、实验室、loc=loc\U val、bbox\U至\U锚定=bbox\U锚定)
ax5.设置标签(“ax5标签”)
ax6.set_ylabel(“ax6 ylabel”)
调整子地块布局(图)
plt.show()
代码2
将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.pylab导入mpl
x1=np.arange(10)
x2=x1*10
y1=x1*2
y2=x1*10000
def调整子批次布局(图):
对于图轴中的ax:
x0,x1=ax.get_xlim()
y0,y1=ax.get_ylim()
ax.set_纵横比((x1-x0)/(y1-y0))
def squarify(图):
调整子地块布局(图)
图=零件图(图尺寸=(6,4))
显示模式=1#1向右显示图例
value=mpl.rcParams['figure.subplot.right']
打印(值)
x=1.6
如果显示模式=1:
loc_val=“右上角”
bbox_锚=(值+x,1.0)
其他:
loc_val=“左下”
bbox_锚=(0,1.02,1.,.102)
ax1=图add_子批次(2,2,1)
ax2=fig.add_子批次(2,2,1,frameon=False,sharex=ax1)
lg1=ax1.绘图(x1,y1,label='ax1')
lg2=ax2.绘图(x2,y2,标签='ax2',颜色='tab:red')
ax2.get_yaxis().设置标记位置('right')
ax1.勾选参数(axis='x',labelcolor='tab:blue')
ax1.勾选参数(轴为y,标签颜色为tab:red)
ax2.勾选参数(轴为y,标签颜色为tab:red)
lga=lg1+lg2
labs=[l.获取lga中l的标签()
如果显示模式=1:
ax1.图例(lga、实验室、loc=loc\U val、bbox\U至\U锚定=bbox\U锚定)
其他:
ax1.图例(lga、labs、loc=loc_val、bbox_至_锚定=bbox_锚定、ncol=2、borderaxespad=0。)
ax1.set_ylabel(“ax1 ylabel”)
ax2.set_ylabel(“ax2 ylabel”)
ax2.get_yaxis().设置标签位置(“右”)
ax3=图add_子批次(2,2,2)
ax4=图add_子批次(2,2,2,frameon=False,sharex=ax3)
lg3=ax3.绘图(x1,y1,label='ax3')
lg4=ax4.绘图(x2,y2,标签='ax4',颜色='tab:red')
ax4.get_yaxis().设置标记位置('right')
ax3.勾选参数(axis='x',labelcolor='tab:blue')
ax3.勾选参数(轴为y,标签颜色为tab:red)
ax4.勾选参数(轴为y,标签颜色为tab:red)
lgb=lg3+lg4
labs=[l.get_label()表示lgb中的l]
如果显示模式=1:
ax3.图例(lga、实验室、loc=loc\U val、bbox\U至\U锚定=bbox\U锚定)
其他:
ax3.图例(lga,实验室,loc=loc_val,bbox_至_锚=bbox_锚,ncol=2,borderaxespad=0。)
ax3.set_ylabel(“ax3 ylabel”)
ax4.set_ylabel(“ax4 ylabel”)
ax4.get_yaxis().设置标签位置(“右”)
ax5=图add_子批次(2,2,3)
ax6=图add_子批次(2,2,3,frameon=False,sharex=ax5)
lg5=ax5.绘图(x1,y1,标签='ax5')
lg6=ax6.绘图(x2,y2,标签='ax6',颜色='tab:red')
ax6.get_yaxis().设置标记位置('right')
ax5.勾选参数(axis='x',labelcolor='tab:blue')
ax5.勾选参数(轴为y,标签颜色为tab:red)
ax6.勾选参数(轴='y',标签颜色='tab:red')
ax6.get_yaxis().设置标签位置(“右”)
lgc=lg5+lg6
labs=[l.get_label()表示lgc中的l]
如果显示模式=1:
ax5.图例(lga、实验室、loc=loc\U val、bbox\U至\U锚定=bbox\U锚定)
其他:
ax5.图例(lga、labs、loc=loc_val、bbox_至_锚定=bbox_锚定、ncol=2、borderaxespad=0)
ax5.设置标签(“ax5标签”)
ax6.set_ylabel(“ax6 ylabel”)
图设置紧密布局(真)
调整子地块布局(图)
#图canvas.mpl_connect(“draw_事件”,lambda evt:squarify(图))
#图1紧_布局图()
plt.show()
至于您的第二个请求,我想知道是否可以将其更改为bbox\u anchor=(1,1)
。谢谢,我不清楚我的要求,图例必须在轴之外。我将把它添加到问题中,如下所示