【发布时间】:2019-10-14 11:21:56
【问题描述】:
我想使用 seaborn 用 violinplots 可视化我的整个 Pandas 数据框,并且我认为我已经进行了必要的更正,以便为我的数据框拥有的大量 270 个变量生成一个大图。
但是,无论我做什么,小提琴图只显示每个变量的内部迷你箱线图(作为另一个问题 here 描述),而不是它们的 kde:
fig, ax = plt.subplots(figsize=(50,5))
ax.set_ylim(-6, 6)
a = sns.violinplot(x='variable', y='value', data=pd.melt(train_norm), ax=ax)
a.set_xticklabels(a.get_xticklabels(), rotation=90);
plt.savefig('massive_violinplot.png', figsize=(50,5), dpi=220)
(为裁剪图道歉,整个事情太大了,无法发布)
而以下代码,使用相同的pd.Dataframe,但只显示前六个变量,正确显示:
fig, ax = plt.subplots(figsize=(10,5))
ax.set_ylim(-6, 6)
a = sns.violinplot(x='variable', y='value', data=pd.melt(train_norm.iloc[:,:6]), ax=ax)
a.set_xticklabels(a.get_xticklabels(), rotation=90);
plt.savefig('massive_violinplot.png', figsize=(10,5), dpi=220)
我怎样才能得到一个像上面那样的所有变量的图表,填充适当的小提琴图来显示他们的 kde 的?
【问题讨论】:
-
如果您尝试在一个图形上放置太多图,a) 您会遇到您所描述的问题,并且 b) 它不再用作数据的可视化。一种选择是将要直接比较的特征分组,并将每个组呈现在不同的子图上。另一种方法是只显示一些能够说明数据有用信息的特征,而丢弃其余的。除此之外,唯一的其他选择是拥有一个非常大的地块,但这并不是一个好主意,原因有很多。
-
我了解将任务分成单独的块的价值,但是在我拥有的小众数据处理上下文中,最好一次查看所有变量,并且必须有办法做到这一点.例如,正如在我的浏览器中看到的,imgur.com/71VD65x 处理如此大的图是完全可行的,而且 seaborn 似乎有足够的空间来生成真正的小提琴图。但是,当我继续扩展图表的
figsize时,最终它开始崩溃,如此处所示,imgur.com/hQWOjKn -
您可以随时将其分解为图像看起来不错的块,然后使用成像工具手动将图像组合在一起。只要保持 y 轴相同的值,你应该可以很容易地做到这一点,而且不会超过 5 分钟。
-
如您所见,
(3000, 5)图在正常的 seaborn 用例中并不可行。底线是 270 个图并不能很好地并排显示。您可以垂直堆叠多个子图(每个子图 6 个,45 个应该足够了)并在每个子图上显示一个子集,但实际上最好的选择可能是查看其他可视化库。散景,也许是为了互动? -
请始终在 Stack Overflow 中分享您的 CSV 文件。提供的链接现在是指向垃圾邮件站点的重定向,因此对于想要从问题中学习的读者来说毫无用处。通常,如果所需文件太大而无法在问题中发布,则该问题是题外话。不过通常所有的例子都可以删减。
标签: python pandas matplotlib data-visualization seaborn