Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 散点标记和箱线图符号组合到单个图例键_Python_Matplotlib_Legend_Symbols - Fatal编程技术网

Python 散点标记和箱线图符号组合到单个图例键

Python 散点标记和箱线图符号组合到单个图例键,python,matplotlib,legend,symbols,Python,Matplotlib,Legend,Symbols,我想用散点图和箱线图绘制两个数据集,第一个代表开发中产品的阶段A,第二个分别代表阶段B。为此,我使用了matplotlib的scatter和boxplot绘图功能。另外,我想在图表中添加一个修改过的图例 我迄今为止所取得的成就 然而,我对这个传说还不满意 我的目标是什么 当前形势 这个问题让我想到了matplotlib的。我通过创建一个圆形和矩形来表示数据点及其统计信息(参见下图和MWE),设法获得了一个尚未令人满意的WIP解决方案 到目前为止,这是我所能做到的,不知何故,我对如何实现理想

我想用散点图和箱线图绘制两个数据集,第一个代表开发中产品的阶段A,第二个分别代表阶段B。为此,我使用了
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()})