我想绘制两个数据集,第一个使用散点图和箱线图表示正在开发的产品的阶段A,第二个分别表示阶段B。为此,我使用了matplotlib
的{{1}}和scatter
绘图功能。另外,我想在图中添加修改后的图例。
我到目前为止所取得的成就
但是,我对这个传说还不满意。
我的目标是
当前情况
问题41752309带我到boxplot
的{{3}}。通过创建一个Circle和Rectangle来表示数据点及其统计信息,我设法获得了一种不令人满意的WIP解决方法(请参见下面的图像和MWE)。
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