重复绘图

时间:2016-11-27 08:43:02

标签: python matplotlib plot

我想在Python的另一个框中将我的标签放在我的情节之上。我现有的情节如下:

my plot

这是我的代码:

fig = plt.figure()
plt.plot(t, sol[:,0], 'blue', lw = 3, label='$N$')
plt.plot(t, sol[:,1], 'green', lw = 3, label='$P$')
plt.plot(t, sol[:,2], 'red', lw = 3, label='$Z$')
plt.plot(t, sol[:,3], 'black', lw = 3, label='$Z$')
plt.legend(loc='best')
plt.xlabel('Time (days)', fontsize=10.)
plt.ylabel('$N,P,Z,D$ ($\mu$mol N L$^{-1}$)', fontsize=10.)
plt.xlim([0.,365.*sim_years])
plt.ylim([0,16])
plt.xticks(fontsize=10.)
plt.yticks(fontsize=10.)
plt.grid()
plt.show()

我希望标签看起来像这样:

Expected label

2 个答案:

答案 0 :(得分:0)

这篇文章的标题有点误导。

我想这就是你所追求的:http://matplotlib.org/1.3.0/examples/pylab_examples/legend_demo.html

答案 1 :(得分:0)

您可以尝试将bbox_to_anchor参数用于plt.legend()。这使您可以对位置进行额外控制:

import matplotlib.pyplot as plt
import numpy as np

# Demo data
sol = np.array([[3,3,4,3], [1,4,2,7], [2,5,3,10], [3,6,4,15], [5,8,2,14]])
t = [100, 200, 300, 400, 500]

fig = plt.figure()
plt.plot(t, sol[:,0], 'blue', lw = 3, label='$N$')
plt.plot(t, sol[:,1], 'green', lw = 3, label='$P$')
plt.plot(t, sol[:,2], 'red', lw = 3, label='$Z$')
plt.plot(t, sol[:,3], 'black', lw = 3, label='$Z$')
plt.legend(loc='upper center', ncol=4, bbox_to_anchor=(0.5, 1.1))
plt.xlabel('Time (days)', fontsize=10.)
plt.ylabel('$N,P,Z,D$ ($\mu$mol N L$^{-1}$)', fontsize=10.)
#plt.xlim([0.,365.*sim_years])
plt.ylim([0,16])
plt.xticks(fontsize=10.)
plt.yticks(fontsize=10.)
plt.grid()
plt.show()

这将显示如下:

Demo plot with legend external to the plot

此处bbox_to_anchor=(0.5, 1.1)表示水平方向的一半,1.0位于顶部,因此1.1位于顶部之上。 ncols=4用于使其水平显示。