Python Matplotlib-将饼图放置在网格中

Python Matplotlib-将饼图放置在网格中,python,matplotlib,charts,pie-chart,Python,Matplotlib,Charts,Pie Chart,我试图将饼图组织成一个网格,左边还有一列,在其中我在特定行的饼图上写入了一些相关数据。现在我的代码是: data = [[0.3,0.3,0.3,0.1],[0.2,0.2,0.2,0.4],[0.1,0.1,0.4,0.4]] def main(): createPieCharts(data) return 0 def createPieCharts(data,piecharts_fname="piecharts"): """ """ import da

我试图将饼图组织成一个网格,左边还有一列,在其中我在特定行的饼图上写入了一些相关数据。现在我的代码是:

data = [[0.3,0.3,0.3,0.1],[0.2,0.2,0.2,0.4],[0.1,0.1,0.4,0.4]]


def main():
    createPieCharts(data)
    return 0


def createPieCharts(data,piecharts_fname="piecharts"):
    """ """
    import datetime
    from matplotlib.backends.backend_pdf import PdfPages
    import matplotlib.pyplot as plt
    areas = ['Arava','Lotz','Paran','Ramon']
    thresholds = [0.0,0.01,0.02]
    num_columns = len(areas)
    num_rows    = len(thresholds)
    with PdfPages(piecharts_fname+'.pdf') as pdf:
        fig, ax = plt.subplots(num_rows,num_columns)
#            fig.suptitle('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
        labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
        for i,threshold in enumerate(thresholds):
            fracs = data[i]
            for j,area in enumerate(areas):
                ax[i,j].set_title(area)
                ax[i,j].pie(fracs, labels=labels,
                            autopct='%1.1f%%', shadow=True, startangle=90)
                ax[i,j].set_aspect('equal')
        plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
        pdf.savefig(fig)
        plt.close()
        # Adding metadata for PDF file
        d = pdf.infodict()
        d['Title'] = 'Pie charts'
        d['CreationDate'] = datetime.datetime.today()

if __name__ == '__main__':
    main()
结果是这样的 虽然我希望它在左边有另一列,如本例中所示-


智能方法是什么?

如果对轴对象使用特殊功能,则可能会对y轴使用“代码>是第一列”标签,而对x轴使用“代码>是最后一行”标签:

def createPieCharts(data,piecharts_fname="piecharts"):
    """ """
    import datetime
    from matplotlib.backends.backend_pdf import PdfPages
    import matplotlib.pyplot as plt
    areas = ['Arava','Lotz','Paran','Ramon']
    thresholds = [0.0,0.01,0.02]
    num_columns = len(areas)
    num_rows    = len(thresholds)
    val = 0. # to y axis labels
    with PdfPages(piecharts_fname+'.pdf') as pdf:
        fig, ax = plt.subplots(num_rows,num_columns)
        labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
        for i,threshold in enumerate(thresholds):
            fracs = data[i]
            for j,area in enumerate(areas):
                ax[i,j].set_title(area)
                ax[i,j].pie(fracs, labels=labels,
                            autopct='%1.1f%%', shadow=True, startangle=90)
                ax[i,j].set_aspect('equal')
                # label y axis
                if ax[i,j].is_first_col():
                    ax[i,j].set_ylabel(str(val), fontsize = 9, rotation = 0)
                    val += .01
        plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
        pdf.savefig(fig)
        plt.close()
        # Adding metadata for PDF file
        d = pdf.infodict()
        d['Title'] = 'Pie charts'
        d['CreationDate'] = datetime.datetime.today()

添加一个额外的列,并将文本放在其中

然后,只需关闭左列()中轴的轴线和刻度,然后使用
ax.text
添加文本标签

注意:您还需要在绘制饼图的其他轴的j索引中添加1

以下是脚本中的函数,已修改:

def createPieCharts(data,piecharts_fname="piecharts"):
    """ """
    import datetime
    from matplotlib.backends.backend_pdf import PdfPages
    import matplotlib.pyplot as plt
    areas = ['Arava','Lotz','Paran','Ramon']
    thresholds = [0.0,0.01,0.02]
    num_columns = len(areas) + 1                                # Add extra column for text
    num_rows    = len(thresholds)
    with PdfPages(piecharts_fname+'.pdf') as pdf:
        fig, ax = plt.subplots(num_rows,num_columns)
#            fig.suptitle('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
        labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
        for i,threshold in enumerate(thresholds):
            fracs = data[i]
            ax[i,0].set_axis_off()                                  # Turn off axes & ticks
            ax[i,0].text(0.5,0.5,threshold,ha='center',va='center') # Add text
            for j,area in enumerate(areas):
                ax[i,j+1].set_title(area)                           # Add 1 to j index
                ax[i,j+1].pie(fracs, labels=labels,                 # Add 1 to j index
                            autopct='%1.1f%%', shadow=True, startangle=90)
                ax[i,j+1].set_aspect('equal')                       # Add 1 to j index
        plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
        pdf.savefig(fig)
        plt.close()
        # Adding metadata for PDF file
        d = pdf.infodict()
        d['Title'] = 'Pie charts'
        d['CreationDate'] = datetime.datetime.today()