Aligning table to x-axis using matplotlib python

后端 未结 1 1812
时光说笑
时光说笑 2021-02-09 03:11

I\'m trying to get the python tables for a bar plot to be aligned. For example in the attached graph, you\'ll see that x-axis is not properly aligned to the vertical line that i

相关标签:
1条回答
  • 2021-02-09 03:33

    I think this is what you are looking for.
    -added a parameter "spare_width" that makes it so the bar graph is proper.
    -resized the legend font and xlabel spacing to look better and not block the data.
    -added the "ggplot" style - I like it better.
    -increased font size to 35 by moving the frequency (GHz) to it's own line and setting height through bbox.

    import csv
    import numpy as np
    import matplotlib.pyplot as plt
    plt.style.use('ggplot')
    import matplotlib
    
    def plot_bar(dataset):
        matplotlib.rc('font', family='sans-serif')
        matplotlib.rc('font', serif='Helvetica Neue')
        matplotlib.rc('text', usetex='false')
        matplotlib.rcParams.update({'font.size': 30})
        fig = plt.figure()
        ax = fig.add_subplot(111)
        fig = matplotlib.pyplot.gcf()
        fig.set_size_inches(30.0,7.5)
        N = len(dataset[1])
    
        Load    = dataset[0]
        QoS     = dataset[1]
        Energy  = dataset[2]
    
        ind = np.arange(N)
        width = 0.35
        spare_width = (1 - width*2)/2
    
        plt.tick_params(axis='both', which='major', labelsize=35, pad=15)
        plt.tick_params(axis='y', which='minor', labelsize=35, pad=15)
    
    
    
        rects1 = ax.bar(ind, QoS, width,
                    color='0.2',
                    label='HP')
    
        rects3 = ax.bar(ind+width, Energy, width,
                    color='0.4',
                    label='OM')
    
        lns = [rects1, rects3]
        labs = [l.get_label() for l in lns]
    
        ax.legend(lns, labs, ncol=2, fontsize=30,framealpha=0)
    
        ax.set_xlim(-spare_width,len(ind)-spare_width)
        ax.set_ylim(0, 16000)
    
        ax.set_ylabel('RPS/Watt', fontsize=35)
        ax.set_xlabel('Percentage of Max Capacity', fontsize=35)
    
        xTickMarks = dataset[0]
        ax.set_xticks(ind+width)
        xtickNames = ax.set_xticklabels(xTickMarks)
        plt.setp(xtickNames, rotation=0, fontsize=40)
        plt.xticks([])
        ax.yaxis.grid()
    
        cell_text = [['2S\n0.65', '3S\n0.65', '4S\n0.65', '4S\n0.65', 
                      '2B2S\n1.15','2B2S\n1.15', '3B2S\n1.15', '2S\n1.15', 
                      '2S\n1.15', '2S\n1.15', '2S\n1.15','2S\n1.15', 
                      '2S\n1.15', '2S\n1.15', '2S\n1.15', '2S\n1.15'],
                ['2S\n0.65', '3S\n0.65', '4S\n0.65', '4S\n0.65',
                 '2S\n1.15', '2S\n1.15', '2S\n1.15', '2S\n1.15', 
                 '2S\n1.15', '2S\n1.15', '2S\n1.15', '2S\n1.15', 
                 '2S\n1.15', '2S\n1.15', '2S\n1.15', '2B\n1.15']]
        colors=['0.2','0.4']
        rows = ['HP\nGHz','OM\nGHz']
        Loc='right'
        the_table = plt.table(cellText=cell_text,
                              rowLabels=rows,
                              colLabels=Load,
                              rowColours=colors,
                            cellLoc='center',
                              loc='bottom',
                              bbox=[0,-0.65,1,0.65])#x,y,w,h
        the_table.scale(1,2.5)
    
        the_table.auto_set_font_size(False)
        the_table.set_fontsize(35)
        plt.subplots_adjust(left=0.2, bottom=0.2)
    
        ax.xaxis.labelpad = 260
    
        ax.yaxis.labelpad = 20
        fig.savefig('rps-watt' +'.eps',format='eps',bbox_inches='tight', pad_inches=0.1, dpi=1000)
    
    dataset = [['29%', '40%', '51%', '63%', '69%', '71%', '74%', '77%', '80%', '83%', '86%', '89%', '91%', '94%', '97%', '100%'], [6524.0, 8749.0, 10470.0, 13096.0, 13126.0, 12965.0, 13493.0, 13717.0, 14351.0, 14993.0, 15308.0, 14320.0, 13179.0, 9809.0, 10168.0, 10621.0], [6524.0, 8749.0, 10470.0, 13096.0, 6827.0, 5586.0, 7697.0, 8205.0, 8298.0, 8733.0, 8887.0, 9278.0, 9659.0, 9809.0, 10168.0, 10621.0]]
    plot_bar(dataset)
    

    This plot created using WinPython-64bit-3.4.4.1Qt5 download here

    0 讨论(0)
提交回复
热议问题