我是生物学家学习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()
答案 0 :(得分:4)
要绘制一幅图中的所有线条,请仅拨打plt.figure()
(或plt.subplots()
)一次,因为每次调用都会创建一个新图形。目前(当onefig
为True
时)您在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')
bbox_to_anchor=(1.05, 1.0)
将图例固定在图外的一个点上
在右上角。
loc=2
anchors the upper left corner(1.05,1.0)
感谢DSM展示了如何移动图例here。 有关如何放置和配置图例的更多信息,请参阅the Legend Guide。