Python 多张图下方的 matplotlib 图例
Python matplotlib legend below multiple graphs
我在一个图中有 2 个图表,我希望图例位于它们下方的空白 space 中。出于某种原因,它总是恰好位于其中一个馅饼的顶部,即使我这样做 "bottom"。
此外,我已经使用 "title" 属性 两次来单独标记每个图表。我怎样才能将标签也移动到图表下方?标题 属性 好像没有 "loc" 属性.
谢谢!
labels = 'a', 'b', 'c', 'd'
fracsQuads = [6, 14, 1, 79]
fracsTrips = [11, 16, 7, 66]
colors=['Goldenrod', 'LimeGreen', 'Crimson', 'DeepSkyBlue']
explode=(0, 0, 0, 0)
# Make square figures and axes
the_grid = GridSpec(1, 2)
plt.subplot(the_grid[0, 0], aspect=1)
plt.pie(fracsQuads, autopct='%1.0f%%', colors=colors, pctdistance=1.2)
plt.title('Four knockouts')
plt.subplot(the_grid[0, 1], aspect=1)
plt.pie(fracsTrips, explode=explode, autopct='%.0f%%', colors=colors, pctdistance=1.2)
plt.title('Three knockouts')
#plt.legend(labels, loc='best')
font = {'family' : 'normal',
'weight' : 'normal',
'size' : 14}
matplotlib.rc('font', **font)
plt.show()
plt.savefig('pythonFigureTest.png', facecolor='white', transparent=True)
重点是您没有标记坐标轴。因此,图例将始终相对于右侧图放置,因为这是最后创建的轴。
您可以使用 bbox_to_anchor
手动移动到图例框。此外,我删除了标题并使用 figtext()
将文本手动放在图下方。
下面的代码应该可以做到:
font = {'family' : 'normal',
'weight' : 'normal',
'size' : 14}
rcParams.update(font)
labels = 'a', 'b', 'c', 'd'
fracsQuads = [6, 14, 1, 79]
fracsTrips = [11, 16, 7, 66]
colors=['Goldenrod', 'LimeGreen', 'Crimson', 'DeepSkyBlue']
explode=(0, 0, 0, 0)
# Make square figures and axes
the_grid = GridSpec(1, 2)
ax1 = plt.subplot(the_grid[0, 0], aspect=1)
ax2 = plt.subplot(the_grid[0, 1], aspect=1)
ax1.pie(fracsQuads, autopct='%1.0f%%', colors=colors, pctdistance=1.2)
ax2.pie(fracsTrips, explode=explode, autopct='%.0f%%', colors=colors, pctdistance=1.2)
plt.figtext(0.19,0.2,'Four knockouts')
plt.figtext(0.61,0.2,'Three knockouts')
ax1.legend(labels, loc='lower center',bbox_to_anchor=(1.1, -0.1),
prop={'size':11})
plt.show()
我在图例框中使用了较小的字体,这样它就可以很好地融入其中。如果您的文本较长,您可能需要 fiddle 加上数字。
我在一个图中有 2 个图表,我希望图例位于它们下方的空白 space 中。出于某种原因,它总是恰好位于其中一个馅饼的顶部,即使我这样做 "bottom"。
此外,我已经使用 "title" 属性 两次来单独标记每个图表。我怎样才能将标签也移动到图表下方?标题 属性 好像没有 "loc" 属性.
谢谢!
labels = 'a', 'b', 'c', 'd'
fracsQuads = [6, 14, 1, 79]
fracsTrips = [11, 16, 7, 66]
colors=['Goldenrod', 'LimeGreen', 'Crimson', 'DeepSkyBlue']
explode=(0, 0, 0, 0)
# Make square figures and axes
the_grid = GridSpec(1, 2)
plt.subplot(the_grid[0, 0], aspect=1)
plt.pie(fracsQuads, autopct='%1.0f%%', colors=colors, pctdistance=1.2)
plt.title('Four knockouts')
plt.subplot(the_grid[0, 1], aspect=1)
plt.pie(fracsTrips, explode=explode, autopct='%.0f%%', colors=colors, pctdistance=1.2)
plt.title('Three knockouts')
#plt.legend(labels, loc='best')
font = {'family' : 'normal',
'weight' : 'normal',
'size' : 14}
matplotlib.rc('font', **font)
plt.show()
plt.savefig('pythonFigureTest.png', facecolor='white', transparent=True)
重点是您没有标记坐标轴。因此,图例将始终相对于右侧图放置,因为这是最后创建的轴。
您可以使用 bbox_to_anchor
手动移动到图例框。此外,我删除了标题并使用 figtext()
将文本手动放在图下方。
下面的代码应该可以做到:
font = {'family' : 'normal',
'weight' : 'normal',
'size' : 14}
rcParams.update(font)
labels = 'a', 'b', 'c', 'd'
fracsQuads = [6, 14, 1, 79]
fracsTrips = [11, 16, 7, 66]
colors=['Goldenrod', 'LimeGreen', 'Crimson', 'DeepSkyBlue']
explode=(0, 0, 0, 0)
# Make square figures and axes
the_grid = GridSpec(1, 2)
ax1 = plt.subplot(the_grid[0, 0], aspect=1)
ax2 = plt.subplot(the_grid[0, 1], aspect=1)
ax1.pie(fracsQuads, autopct='%1.0f%%', colors=colors, pctdistance=1.2)
ax2.pie(fracsTrips, explode=explode, autopct='%.0f%%', colors=colors, pctdistance=1.2)
plt.figtext(0.19,0.2,'Four knockouts')
plt.figtext(0.61,0.2,'Three knockouts')
ax1.legend(labels, loc='lower center',bbox_to_anchor=(1.1, -0.1),
prop={'size':11})
plt.show()
我在图例框中使用了较小的字体,这样它就可以很好地融入其中。如果您的文本较长,您可能需要 fiddle 加上数字。