创建图例并在一个图表中绘制多个数据集

时间:2014-08-22 18:09:55

标签: python graph matplotlib legend

我是生物学家学习python,我有一个代码,我使用它来处理我的数据。但是我在制作一个包含所有数据集和图例的图表时遇到问题。我有大量的数据,目前的代码一次只绘制一个,如果我需要比较它们就不是很好。任何人都可以帮助我并提出我应该做的建议,以便能够使用图表外的图例绘制一个包含所有数据的图表。这是代码的一部分:

def plotcorrected(self, conditions= 'all', strains= 'all'):
        '''
        Plots the corrected fluorescence per cell for all strains in all conditions.
        '''
        S, t= self.d, self.t
        if conditions == 'all':
            cons= S.keys()
            if 'media' in cons:
                cons.pop(cons.index('media'))
        else:
            cons= gu.makelist(conditions)
            #draw all plots
        if onefig:
            plt.figure()
        for c in cons:
            if strains == 'all':
                strains=  S[c].keys()
            else:
                strains= gu.makelist(strains)
            for s in strains:
                if not onefig:
                    plt.figure()
                if s != 'null' and s != 'WT':
                    #plt.figure()
                    plt.plot(t, S[c][s]['mg'], '.-')
                    plt.plot(t, S[c][s]['mg']+S[c][s]['sg'], 'k:', alpha=0.4)
                    plt.plot(t, S[c][s]['mg']-S[c][s]['sg'], 'k:', alpha=0.4)
                if not onefig:
                    plt.xlabel('time (hours)')
                    plt.ylabel('corrected fluorescence')
                    plt.title('corrected ' + s + ' in ' + c)
                    plt.show()
        if onefig:
                    plt.xlabel('time (hours)')
                    plt.ylabel('corrected fluorescence')
                    plt.title('corrected ' + s + ' in ' + c)
                    plt.show()

1 个答案:

答案 0 :(得分:4)

要绘制一幅图中的所有线条,请仅拨打plt.figure()(或plt.subplots())一次,因为每次调用都会创建一个新图形。目前(当onefigTrue时)您在plt.figure()内拨打了for-loop,这就是为什么您会获得多个数字而不是一个数字上的所有行

要将图例移动到图形绘图区域之外,可以使用

leg = ax.legend(loc=2, bbox_to_anchor=(1.05, 1.0))

将图例放在右上角附近。

例如,

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = np.arange(0.0, 2.0, 0.02)
y1 = np.sin(2*np.pi*x)
y2 = np.exp(-x)
ax.plot(x, y1, 'rs-', label='Line 1')
ax.plot(x, y2, 'go', label='Line 2')

y3 = np.sin(4*np.pi*x)
y4 = np.exp(-2*x)
ax.plot(x, y3, 'yd-', label='Line 3')
ax.plot(x, y4, 'k^', label='Line 4')

leg = ax.legend(loc=2, bbox_to_anchor=(1.05, 1.0))
plt.savefig('/tmp/test.png', bbox_inches='tight')

enter image description here

bbox_to_anchor=(1.05, 1.0)将图例固定在图外的一个点上 在右上角。

该位置的图例的

loc=2 anchors the upper left corner(1.05,1.0)

感谢DSM展示了如何移动图例here。 有关如何放置和配置图例的更多信息,请参阅the Legend Guide