为了账号安全,请及时绑定邮箱和手机立即绑定

子图中的熊猫盒图出现问题

子图中的熊猫盒图出现问题

慕标5832272 2021-03-08 10:13:05
我在子图中绘制Pandas箱形图时遇到问题。基于我尝试的两种方式,创建箱线图要么删除我已经创建的所有子图,要么在子图网格之后绘制箱线图。但是我似乎无法在子图网格中绘制它。import matplotlib.pyplot as pltimport pandasfrom pandas import DataFrame, Seriesdata = {'day' : Series([1, 1, 1, 2, 2, 2, 3, 3, 3]),         'val' : Series([3, 4, 5, 6, 7, 8, 9, 10, 11])}df = pandas.DataFrame(data)我尝试过的第一件事是:plt.figure()plt.subplot(2, 2, 1)plt.plot([1, 2, 3])plt.subplot(2, 2, 4)df.boxplot('val', 'day')但这只是在子图之外创建了情节:因此,我然后尝试手动提供轴:plt.figure()plt.subplot(2, 2, 1)plt.plot([1, 2, 3])plt.subplot(2, 2, 4)ax = plt.gca()df.boxplot('val', 'day', ax=ax)但这简单地破坏了子图网格以及原始图像:有什么想法可以使我的箱线图图像显示在子图的右下角网格中(在第一组图像中为空)?
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

在熊猫绘图设置中,这似乎是一个错误,或者至少是不受欢迎的行为。发生的情况是,如果您为提供by参数boxplot,pandas会发出自己的subplots调用,从而删除所有现有的子图。显然,这样做是为了,如果要绘制多个值,它将为每个值创建子图(例如,一个框图用于Y1,每天,另一个用于Y2,等等)。

但是,看起来应该做但不应该做的是,检查是否仅绘制一个值,在这种情况下,请使用提供的ax对象(如果有)而不是自己绘制子图。当您仅绘制一个值时,它会创建一个1乘1的子图网格,这并不是很有用。它的逻辑也有点奇怪,因为它根据要绘制的数(第一个参数的长度)创建一个网格,但是只有在提供一个by参数的情况下,它才会这样做。这样做的目的似乎是允许使用多盒图df.boxplot(['col1', 'col2']),但是这样做会妨碍您进行合理的尝试df.boxplot('col1', 'grouper1')

我建议在Pandas Bug Tracker上提出一个问题。

同时,一个有点棘手的解决方法是执行此操作:

df.pivot('val', 'day', 'val').boxplot(ax=ax)

这将重塑您的数据,以便分组依据值(天)为列。对于val没有特定day值出现的值,重塑后的表格具有许多NA ,但在绘制时会忽略这些NA,因此可以在正确的子图位置获得正确的图。


查看完整回答
反对 回复 2021-03-23
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号