使用matplotlib的所有饼图的常见图例

时间:2016-07-18 18:27:11

标签: python matplotlib

我使用以下代码创建了7个图。我希望所有7个地块都有一个共同的图例,最好是在右上角。对于绿色区域,图例应为“发送数据”,对于红色区域,它应为“不发送数据”。我尝试使用figlegend但无法实现它。任何帮助将不胜感激。

 fig = plt.figure(figsize=(18,10), dpi=1600)
 ax1 = plt.subplot2grid((2,4),(0,0))
 plt.pie(df_14,colors=("g","r"))
 plt.title('LOGS1')
 ax2 = plt.subplot2grid((2, 4), (0, 1))
 plt.pie(df_24,colors=("g","r"))
 plt.title('LOGS2')
 ax3 = plt.subplot2grid((2, 4), (0, 2))
 plt.pie(df_34,colors=("g","r"))
 plt.title('LOGS3')
 ax4 = plt.subplot2grid((2, 4), (0, 3))
 plt.pie(df_44,colors=("g","r"))
 plt.title('LOGS4')
 ax5 = plt.subplot2grid((2, 4), (1, 0))
 plt.pie(df_54,colors=("g","r"))
 plt.title('LOGS5')
 ax6 = plt.subplot2grid((2, 4), (1, 1))
 plt.pie(df_64,colors=("g","r"))
 plt.title('LOGS6')
 ax7 = plt.subplot2grid((2, 4), (1, 2))
 line7 = plt.pie(df_74,colors=("g","r"))
 plt.title('LOGS7')

enter image description here

1 个答案:

答案 0 :(得分:2)

传奇只需要被调用一次,否则你会得到7个不同的传说。我在下面展示了一个例子。请注意,您必须将自己的数据替换为ax.pie()

data1 = (10,90)  # some data to be plotted
data2 = (40,50)
data3 = (70,30)

labels = ['Sending Data', 'Not Sending Data'] #legend labels to be plotted
colors = ['green', 'red']

fig = plt.figure(figsize=(16,8))

ax1 = plt.subplot2grid((2,4),(0,0))
ax1.pie(data1, colors=colors, startangle=90)
plt.title('LOGS1')

ax2 = plt.subplot2grid((2, 4), (0, 1))
ax2.pie(data2, colors=colors, startangle=90)
plt.title('LOGS2')

ax3 = plt.subplot2grid((2, 4), (0, 2))
ax3.pie(data3, colors=colors, startangle=90)
plt.title('LOGS3')

ax4 = plt.subplot2grid((2, 4), (0, 3))
ax4.pie(data1, colors=colors, startangle=90)
plt.title('LOGS4')

ax5 = plt.subplot2grid((2, 4), (1, 0))
ax5.pie(data2, colors=colors, startangle=90)
plt.title('LOGS5')

ax6 = plt.subplot2grid((2, 4), (1, 1))
ax6.pie(data3, colors=colors, startangle=90)
plt.title('LOGS6')

ax7 = plt.subplot2grid((2, 4), (1, 2))
patches, texts = ax7.pie(data1, colors=colors, startangle=90) #use this plot to show the legend
plt.title('LOGS7')
plt.legend(patches, labels, bbox_to_anchor=(2.3, 2), prop={'size':14}) #show the legend defined in labels
#change values of 'bbox_to_anchor' to move the legend to the desired location

plt.axis('equal') # Set aspect ratio to be equal so that pie is drawn as a circle.
plt.tight_layout()
plt.subplots_adjust(right=0.94) #adjust the spacing on right to see legend clearly
plt.show()

这会生成以下图表:

enter image description here