Python 散点标记和箱线图符号组合到单个图例键
我想用散点图和箱线图绘制两个数据集,第一个代表开发中产品的阶段A,第二个分别代表阶段B。为此,我使用了Python 散点标记和箱线图符号组合到单个图例键,python,matplotlib,legend,symbols,Python,Matplotlib,Legend,Symbols,我想用散点图和箱线图绘制两个数据集,第一个代表开发中产品的阶段A,第二个分别代表阶段B。为此,我使用了matplotlib的scatter和boxplot绘图功能。另外,我想在图表中添加一个修改过的图例 我迄今为止所取得的成就 然而,我对这个传说还不满意 我的目标是什么 当前形势 这个问题让我想到了matplotlib的。我通过创建一个圆形和矩形来表示数据点及其统计信息(参见下图和MWE),设法获得了一个尚未令人满意的WIP解决方案 到目前为止,这是我所能做到的,不知何故,我对如何实现理想
matplotlib
的scatter
和boxplot
绘图功能。另外,我想在图表中添加一个修改过的图例
我迄今为止所取得的成就
然而,我对这个传说还不满意
我的目标是什么
当前形势
这个问题让我想到了matplotlib的。我通过创建一个圆形和矩形来表示数据点及其统计信息(参见下图和MWE),设法获得了一个尚未令人满意的WIP解决方案
到目前为止,这是我所能做到的,不知何故,我对如何实现理想的图例设计感到困惑,特别是:
- 如何将平均线、中间线和胡须线添加到图例箱线图符号中
- 如何在箱线图符号旁边以实线方式添加第二个符号(表示数据),该符号是实际的
(而不是标记
),该标记如何具有与散布数据相同的颜色代码作为面颜色面片.Circle
Hannes箱线图由5条线和1个矩形组成。这些是您可以在custome句柄中创建的内容。您可以使用带有单个点的
Line2D
来代替圆环,并根据需要设置其标记。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
class AnyObject(object):
pass
class AnyObjectHandler(object):
def legend_artist(self, legend, orig_handle, fontsize, handlebox):
x0, y0 = handlebox.xdescent, handlebox.ydescent
width, height = handlebox.width, handlebox.height
scatter = mpatches.Circle((x0+width/5, y0+height/2), radius=3,
edgecolor='k', lw=.5,
transform=handlebox.get_transform())
x, y, w, h = x0+width*.5, y0, width*2/3, height
box = mpatches.Rectangle([x, y], w, h, facecolor='w',
edgecolor='k',
transform=handlebox.get_transform())
handlebox.add_artist(box)
handlebox.add_artist(scatter)
return [scatter, box]
# Random dataset.
m, n = 20, 5
x = list(range(n))*m
y = np.random.randn(m, n)
# Plot.
plt.gcf().set_size_inches(5, 3)
ax = plt.gca()
sc = ax.scatter([z+1 for z in x], y, c=y, s=25)
ax.boxplot(y, showfliers=False)
# Modified legend.
plt.legend([AnyObject()], ['Data & Statistics A'],
handler_map={AnyObject: AnyObjectHandler()})