python - 图例句柄在 matplotlib 中未正确对齐
问题描述
我一次绘制 3 件事:一条多色线通过 a LineCollection
(在this之后)和 a scatter
(用于标记“覆盖”线条连接的位置)作为平均值,afill_between
用于最小/最大值。我得到所有图例返回来绘制一个图例句柄。该图如下所示:
可以注意到,圆形标记未与线对齐。我该如何调整这个?
绘制它们的代码和图例如下所示:
lc = LineCollection(segments, cmap='turbo',zorder=3)
p1 = ax.add_collection(lc)
p2 = ax.fill_between(x, errmin,errmax, color=colors[1],zorder=2)
ps = ax.scatter(x,y,marker='o',s=1,c=y,cmap='turbo',zorder=4)
ax.legend([(p2, p1, ps)], ["(min/avg/max)"],fontsize=tinyfont, facecolor='white', loc='lower right')
解决方案
图例有一个scatteryoffsets=
默认为的参数[0.375, 0.5, 0.3125]
。由于只显示了一个点,将其设置为[0.5]
应该在图例标记的中心显示点。
要更改图例中线条的颜色,可以创建现有线条的副本,更改其颜色并使用该副本创建图例。
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import numpy as np
from copy import copy
x = np.arange(150)
y = np.random.randn(150).cumsum()
y -= y.min()
y /= y.max()
errmin = 0
errmax = 1
segments = np.array([x[:-1], y[:-1], x[1:], y[1:]]).T.reshape(-1, 2, 2)
fig, ax = plt.subplots(figsize=(12, 3))
lc = LineCollection(segments, cmap='turbo', zorder=3)
lc.set_array(y[:-1])
p1 = ax.add_collection(lc)
p2 = ax.fill_between(x, errmin, errmax, color='lightblue', zorder=2, alpha=0.4)
ps = ax.scatter(x, y, marker='o', s=5, color='black', zorder=4)
p1copy = copy(p1)
p1copy.set_color('crimson')
leg = ax.legend([(p2, p1copy, ps)], ["(min/avg/max)"], fontsize=10, facecolor='white', loc='lower right',
scatteryoffsets=[0.5])
ax.margins(x=0.02)
plt.show()
推荐阅读
- tarantool - tarantool SQL 支持在哪里?
- azure-devops - 允许所有用户查看添加到错误/任务的图像的 VSTS 权限
- c# - 传递一个空值
- javascript - 我需要获取数据库中的文档数量(mongodb)
- powershell - 从 Powershell 通过电子邮件发送输出
- javascript - \u7f 不断地将自己插入到我的 Javascript 代码中?
- ios - 如何解决使用未解析的标识符“SetOptions”?
- sql-server - 遍历 SQL 表中的列的最佳方法?
- python - 计算分布的置信度
- java - 从 arraylist 中删除对象时保持哈希图中的基数