mat*_*ang 3 python matplotlib legend
我想在图例中同时显示颜色和标记。颜色代表一件事,标记代表另一件事。它看起来应该像附加的图像。这是我目前的代码:
x = np.arange(20)
y = np.sin(x)
fig, ax = plt.subplots()
line1 = ax.scatter(x[:10],y[:10],20, c="red", picker=True, marker='*')
line2 = ax.scatter(x[10:20],y[10:20],20, c="red", picker=True, marker='^')
ia = lambda i: plt.annotate("Annotate {}".format(i), (x[i],y[i]), visible=False)
img_annotations = [ia(i) for i in range(len(x))]
def show_ROI(event):
for annot, line in zip([img_annotations[:10],img_annotations[10:20]], [line1, line2]):
if line.contains(event)[0]:
...
fig.canvas.draw_idle()
fig.canvas.mpl_connect('button_press_event', show_ROI)
plt.show()
Run Code Online (Sandbox Code Playgroud)
以下是一个通用示例,说明如何使用代理艺术家来创建具有不同标记和颜色的图例。
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(8,10)
data[:,0] = np.arange(len(data))
markers=["*","^","o"]
colors = ["crimson", "purple", "gold"]
for i in range(data.shape[1]-1):
plt.plot(data[:,0], data[:,i+1], marker=markers[i%3], color=colors[i//3], ls="none")
f = lambda m,c: plt.plot([],[],marker=m, color=c, ls="none")[0]
handles = [f("s", colors[i]) for i in range(3)]
handles += [f(markers[i], "k") for i in range(3)]
labels = colors + ["star", "triangle", "circle"]
plt.legend(handles, labels, loc=3, framealpha=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |