Matplotlib 图例字符串格式化/对齐
Matplotlib Legend string formatting / Align
我正在尝试绘制一个图例格式正确的图表。
import matplotlib.pyplot as plt
test_label ="""\
CL :1.2565
CM :1.2565
Tot CD :1.2565"""
fig, ax = plt.subplots()
foil=[(0, 1), (0, 0), 'black']
ax.plot(*foil, label=test_label)
plt.xlim(-0.5, 1.5)
plt.ylim(-0.75, 0.75)
plt.legend(frameon=False)
plt.show(block=False)
如您所见,test_label 的格式很好(垂直对齐的冒号),但是当我进行实际绘图时,不会保留这种对齐方式。
任何人都可以建议一种放置此图例的方式,使所有冒号都垂直对齐吗?
您可能希望将字体类型更改为 monospace
。
代码:
import matplotlib.pyplot as plt
test_label ="""\
CL :1.2565
CM :1.2565
Tot CD :1.2565"""
# Change the font type.
plt.rcParams['font.family'] = 'monospace'
fig, ax = plt.subplots()
foil=[(0, 1), (0, 0), 'black']
ax.plot(*foil, label=test_label)
plt.xlim(-0.5, 1.5)
plt.ylim(-0.75, 0.75)
plt.legend(frameon=False)
plt.show(block=False)
输出:
您可以将图例的文字对齐方式设置为右对齐,使数字位数相同,可以对齐。
import matplotlib.pyplot as plt
test_label ="""\
CL :1.2565
CM :1.2565
Tot CD :1.2565"""
fig, ax = plt.subplots()
foil=[(0, 1), (0, 0), 'black']
ax.plot(*foil, label=test_label)
plt.xlim(-0.5, 1.5)
plt.ylim(-0.75, 0.75)
legend = plt.legend(frameon=False)
for t in legend.get_texts():
t.set_ha('right')
plt.show(block=False)
我正在尝试绘制一个图例格式正确的图表。
import matplotlib.pyplot as plt
test_label ="""\
CL :1.2565
CM :1.2565
Tot CD :1.2565"""
fig, ax = plt.subplots()
foil=[(0, 1), (0, 0), 'black']
ax.plot(*foil, label=test_label)
plt.xlim(-0.5, 1.5)
plt.ylim(-0.75, 0.75)
plt.legend(frameon=False)
plt.show(block=False)
如您所见,test_label 的格式很好(垂直对齐的冒号),但是当我进行实际绘图时,不会保留这种对齐方式。
任何人都可以建议一种放置此图例的方式,使所有冒号都垂直对齐吗?
您可能希望将字体类型更改为 monospace
。
代码:
import matplotlib.pyplot as plt
test_label ="""\
CL :1.2565
CM :1.2565
Tot CD :1.2565"""
# Change the font type.
plt.rcParams['font.family'] = 'monospace'
fig, ax = plt.subplots()
foil=[(0, 1), (0, 0), 'black']
ax.plot(*foil, label=test_label)
plt.xlim(-0.5, 1.5)
plt.ylim(-0.75, 0.75)
plt.legend(frameon=False)
plt.show(block=False)
输出:
您可以将图例的文字对齐方式设置为右对齐,使数字位数相同,可以对齐。
import matplotlib.pyplot as plt
test_label ="""\
CL :1.2565
CM :1.2565
Tot CD :1.2565"""
fig, ax = plt.subplots()
foil=[(0, 1), (0, 0), 'black']
ax.plot(*foil, label=test_label)
plt.xlim(-0.5, 1.5)
plt.ylim(-0.75, 0.75)
legend = plt.legend(frameon=False)
for t in legend.get_texts():
t.set_ha('right')
plt.show(block=False)