Python 2.7 Matplotlib-设置文字换行的限制

Python 2.7 Matplotlib-设置文字换行的限制,python-2.7,matplotlib,annotations,word-wrap,limits,Python 2.7,Matplotlib,Annotations,Word Wrap,Limits,我正在尝试生成一个有四个季度的情节,每个季度都有一些文字说明了关于那个季度的一些事情。然而,当我试图包装文本时,我不知道如何设置文本的限制。例如,在附图中,我想将文本限制为x=0。然而,它一直持续到x轴极限的结束。请查看随附的代码和代码生成的相应绘图 import matplotlib %matplotlib inline import matplotlib.pyplot as plt import numpy as np from textwrap import wrap font = {

我正在尝试生成一个有四个季度的情节,每个季度都有一些文字说明了关于那个季度的一些事情。然而,当我试图包装文本时,我不知道如何设置文本的限制。例如,在附图中,我想将文本限制为x=0。然而,它一直持续到x轴极限的结束。请查看随附的代码和代码生成的相应绘图

import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt

import numpy as np
from textwrap import wrap

font = {'size': 22}
matplotlib.rc('font', **font)
fig = plt.figure(figsize=(8, 8))
plt.axis([-10, 10, -10, 10])

ax = plt.gca()

ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')

ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

plt.xlabel('Energy ($kWh$)')
ax.xaxis.set_label_coords(0.85, .48)
ax.xaxis.set_ticks_position('bottom')
ax.set_xlim(-10, 10)
ax.xaxis.set_ticks([])

plt.ylabel('Discomfort ($\%$)', rotation=0)
ax.yaxis.set_label_coords(0.7, 0.01)
ax.yaxis.set_ticks_position('left')
ax.set_ylim(-10, 10)
ax.yaxis.set_ticks([])

ax.annotate(
    'Reference Point', xy=(0, 0), xycoords='data',
    xytext=(-10, 2), textcoords='data', wrap=True,
    arrowprops=dict(facecolor='black'))

t = "This is a really long string that I'd rather have wrapped so that 
it doesn't go outside of the figure, but if it's long enough it will go 
off the top or bottom!"

ax.text(-10, 3.5, t, ha='left', wrap=True, fontsize=20)
plt.tight_layout()
plt.savefig('sample.png')

从图中可以看出,包裹发生在图形限制处。虽然这不是很舒服,我可以想象很多情况下,这根本没有帮助,但在这里,它允许通过选择正确的对齐方式来包装文本

ax.text(0.49, 0.98, t, ha='right',va="top", wrap=True, 
        fontsize=20, transform=ax.transAxes)
ax.text(0.51, 0.98, t, ha='left',va="top", wrap=True, 
        fontsize=20, transform=ax.transAxes)
ax.text(0.49, 0.49, t, ha='right',va="top", wrap=True, 
        fontsize=20, transform=ax.transAxes)

我们能让文本中心在所有四分之一处对齐或对齐吗?multiline='center'完成了这项工作。谢谢你的及时回复。