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

时间:2018-08-04 13:16:21

标签: python matplotlib legend symbols

我想绘制两个数据集,第一个使用散点图和箱线图表示正在开发的产品的阶段A,第二个分别表示阶段B。为此,我使用了matplotlib的{​​{1}}和scatter绘图功能。另外,我想在图中添加修改后的图例。

我到目前为止所取得的成就

enter image description here

但是,我对这个传说还不满意。

我的目标是

enter image description here

当前情况

问题41752309带我到boxplot的{​​{3}}。通过创建一个Circle和Rectangle来表示数据点及其统计信息,我设法获得了一种不令人满意的WIP解决方法(请参见下面的图像和MWE)。

custom legend handlers

matplotlib

到目前为止,这是我所掌握的,我不知如何才能实现所需的图例设计,尤其是:

  • 如何在图例箱线图符号中添加均值线,中值线和须线?
  • 如何以一种可靠的方式在框线图符号旁边添加第二个符号(代表数据),它是实际的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()}) (而不是marker),并且该标记如何具有与我的散点数据具有相同颜色代码的面色?

我将不胜感激:)

Hannes

0 个答案:

没有答案