Python 3.x 如何为单个打印实例创建两个图例对象?

Python 3.x 如何为单个打印实例创建两个图例对象?,python-3.x,matplotlib,bar-chart,legend,Python 3.x,Matplotlib,Bar Chart,Legend,我使用以下示例代码生成条形图 import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 5, 5) y = np.exp(x) w = x[1] - x[0] colors = ['blue' if idx % 2 == 0 else 'red' for idx in range(len(x))] fig, ax = plt.subplots() ax.bar(x, y, width=w, color=col

我使用以下示例代码生成条形图

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5, 5)
y = np.exp(x)
w = x[1] - x[0]

colors = ['blue' if idx % 2 == 0 else 'red' for idx in range(len(x))]

fig, ax = plt.subplots()
ax.bar(x, y, width=w, color=colors, label='sample plot')
ax.legend()
plt.show()
plt.close(fig)


我想在图例对象中同时显示红色和蓝色。我能想出两个视觉上有吸引力的想法。第一个想法是创建两个矩形对象(一个红色,另一个蓝色),它们垂直以图例标签为中心。第二个想法是在图例对象(蓝色)上覆盖半个矩形(红色)。但我不知道如何实现这两个目标。我已经看过matplotlib文档了,我只是感到困惑。我该怎么做呢?

我想一个简单的选择是使用
matplotlib.legend\u handler.HandlerTuple
并为图例句柄提供一个红色和蓝色矩形的元组

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.legend_handler

x = np.linspace(0, 5, 5)
y = np.exp(x)
w = x[1] - x[0]

colors = ['blue' if idx % 2 == 0 else 'red' for idx in range(len(x))]

fig, ax = plt.subplots()
bars = ax.bar(x, y, width=w, color=colors, label='sample plot')

ax.legend(handles = [tuple(bars[:2])], labels=['sample plot'], loc='upper left', 
          handler_map = {tuple: matplotlib.legend_handler.HandlerTuple(None)})

plt.show()

除此之外,您当然可以使用中所述的任何自定义处理程序