![](/img/trans.png)
[英]How to plot instance attributes from multiple objects on same plot in Python 3
[英]How to create two legend objects for a single plot instance?
我使用以下示例代码生成条形图。
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)
我想在图例对象中同时显示红色和蓝色。 我可以想到2个吸引人的想法。 第一个想法是创建两个围绕图例标签垂直居中的矩形对象(一个红色,另一个蓝色)。 第二个想法是在图例对象(蓝色)上覆盖一个矩形的一半(红色)。 但是我不知道如何实现这两个目标。 我看了matplotlib文档,我很困惑。 我该怎么做呢?
我猜一个简单的选择是使用matplotlib.legend_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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.