Matplotlib 有没有办法从一个海生小提琴手的小盒子里得到这个小盒子?

Matplotlib 有没有办法从一个海生小提琴手的小盒子里得到这个小盒子?,matplotlib,jupyter-notebook,seaborn,Matplotlib,Jupyter Notebook,Seaborn,我试图画一系列很长的箱线图。我喜欢里面绘制的微型箱线图的美感(通过seaborn.violinplot的“inner”参数控制)。有没有人知道一个简单的方法来绘制这个迷你箱线图,而不绘制小提琴图的其余部分?谢谢 我能够创建一个violinplot的子类,实现我想要的功能。基本上,我只是复制了绘制Voilin的代码,删除了我不需要的部分。这显然有点难看,但它做到了。如果有人提出了更优雅的解决方案,请发布您的答案 您可以在以下位置找到我的解决方案: 这会产生如下结果: 小提琴是PolyCollec

我试图画一系列很长的箱线图。我喜欢里面绘制的微型箱线图的美感(通过seaborn.violinplot的“inner”参数控制)。有没有人知道一个简单的方法来绘制这个迷你箱线图,而不绘制小提琴图的其余部分?谢谢


我能够创建一个violinplot的子类,实现我想要的功能。基本上,我只是复制了绘制Voilin的代码,删除了我不需要的部分。这显然有点难看,但它做到了。如果有人提出了更优雅的解决方案,请发布您的答案

您可以在以下位置找到我的解决方案:

这会产生如下结果:


小提琴是
PolyCollection
对象。您可以从轴上删除所有
PolyCollection
s。如果轴仅包含小提琴图,而不包含任何其他
PolyCollection
s,则这是有意义的

import matplotlib.pyplot as plt
import seaborn as sns

sns.set(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", data=tips)


from matplotlib.collections import PolyCollection
for a in ax.findobj(PolyCollection):
    a.remove()

ax.relim()
ax.autoscale_view()

plt.show()

或者更简单一点

for a in ax.collections:
    a.remove()

干得好。出于好奇,您的观众、研究人员、开发人员或其他群体是谁?既然这个情节去掉了更好地呈现分布的小提琴部分,你认为它会被广泛接受吗?观众将是研究人员/临床医生/我自己。我可视化的数据都是正态分布的,所以显示分布是多余的。我将模型的AUC随时间可视化,以了解模型是否随时间漂移(我怀疑是这样)。我正在使用引导为箱线图生成样本。根据结果,我可能是唯一查看这些图表的人:-D.聪明的解决方案!我不知道findobj函数。非常方便!您不需要
findobj
。我添加了一个没有它的解决方案。这种方法的一个缺点是ylim基于包含violinplots的绘图版本,这意味着您必须在之后显式地设置ylim。在我的例子中,这是可以的,因为我已经设置了ylim,但是如果其他人使用这种方法,可能会遇到这个问题。