将图例放在子图的位置

时间:2017-01-10 05:04:57

标签: python matplotlib legend subplot

我想在一个中心子图的位置上放一个图例(并将其删除)。 我写了这段代码:

import matplotlib.pylab as plt
import numpy as np

f, ax = plt.subplots(3,3)
x = np.linspace(0, 2. * np.pi, 1000)
y = np.sin(x)

for axis in ax.ravel():
    axis.plot(x, y)
    legend = axis.legend(loc='center')

plt.show()

我不知道如何隐藏中心情节。为什么没有出现传奇?

example plot

此链接无效http://matplotlib.org/1.3.0/examples/pylab_examples/legend_demo.html

1 个答案:

答案 0 :(得分:3)

您的代码存在一些问题。在for循环中,您试图在每个轴上绘制一个图例(loc="center"指的是轴,而不是图形),但是您没有给出在图例中表示的绘图标签。

您需要在循环中选择中心轴,并仅显示此轴的图例。如果你不想在那里行,那么循环的这个迭代也应该没有plot调用。您可以使用我在以下代码中执行的一组条件执行此操作:

import matplotlib.pylab as plt
import numpy as np

f, ax = plt.subplots(3,3)
x = np.linspace(0, 2. * np.pi, 1000)
y = np.sin(x)

handles, labels = (0, 0)

for i, axis in enumerate(ax.ravel()):

    if i == 4:
        axis.set_axis_off()
        legend = axis.legend(handles, labels, loc='center')
    else:
        axis.plot(x, y, label="sin(x)")

    if i == 3:
        handles, labels = axis.get_legend_handles_labels()

plt.show()

这给了我以下图片:

enter image description here