【问题标题】:Box Whisker Plot using seaborn does not show the box and whiskers使用 seaborn 的 Box Whisker Plot 不显示盒子和胡须
【发布时间】:2018-11-30 10:59:08
【问题描述】:

我正在尝试用 seaborn 构建一个盒子和胡须图。我的最小值为“-200,000”,最大值为“1,400,000”。这两个都是异常值。但是我只得到了有点类似于散点图的图表。

下面是我的代码

import pandas as pd
import numpy as np
import xlrd

import matplotlib.pyplot as plt
import seaborn as sns

pi_analysis = pd.read_excel(r'C:\PI\PI Analysis.xlsx',
                           sheet_name = 'Raw Data'
                           , header = 0
                           )
print(pi_analysis)
group_segement= pi_analysis[['Segment', 'TOTAL AMOUNT']].groupby('Segment').sum()

print(group_segement)
group_segement_mean= pi_analysis[['Segment', 'TOTAL AMOUNT']].groupby('Segment')
group_segement_mean.mean().head()
group_segement_mean.describe()

sns.boxplot(x="Segment", y="TOTAL AMOUNT",data=pi_analysis)

附上图片。已尝试更改访问权限。那没起效。任何关于如何显示盒子和胡须的建议。

更改比例后的新图像。

这是代码部分。但是它仍然没有给我完整的视图。

ax=sns.boxplot(x='Segment',y='TOTAL AMOUNT',data=pi_analysis)
ax.set_ylim(-10*10^8,10*10^8)

问候, 任。

【问题讨论】:

  • 如果您删除那些异常值并重新绘制,您会看到什么?看起来这些框可能由于数据的规模而被压缩
  • @G.Anderson 我进行了更改,但仍然没有看到任何改进。有没有办法我可以改变比例,这样它们的盒子就不会被压缩。
  • @G.Anderson 使用此ax=sns.boxplot(x='Segment', y='TOTAL AMOUNT',data=pi_analysis, linewidth = 2.5) ax.set_ylim([-2*10^7,2*10^97) 进行了更改以进行扩展。它确实显示了该框。有一个更好的方法吗。因为我无法查看所有正在绘制的数据点。根据 Y 中的最大值将访问量转换为数百万或数十亿
  • 我的问题是箱线图是否是数据的正确表示。如果您的范围和四分位数使得您得到您所做的结果,那么我会考虑设计您的数据以删除异常值,或者找到更适合您的目的的另一种表示
  • @G.Anderson 找出我正在尝试箱线图的异常值,然后希望通过创建一个新的数据框将它们从数据中删除。我不可能检查超过 40000 行来找出每个段的异常值

标签: python seaborn


【解决方案1】:

您看到的压缩框是缩放适应极端异常值的结果。丢弃异常值很容易

Seaborn 箱线图将采用 matplotlib 参数:

showfliers=False

这将导致仅绘制箱线图和晶须图,不显示异常值。

您的代码的最后一行将是:

sns.boxplot(x="Segment", y="TOTAL AMOUNT",data=pi_analysis, showfliers=False) 

【讨论】:

    【解决方案2】:

    正如@g-anderson 在他的评论中所暗示的那样,箱线图就在那里,它太小了,你看不到。考虑以下代码:

    d = np.random.random(size=(100,))
    d[0] = 100
    d[-1] = -100
    
    fig, ax = plt.subplots()
    sns.boxplot(data=d, orient='vertical')
    

    如果您想查看箱线图,只需将 y 轴重新缩放到更相关的范围:

    fig, ax = plt.subplots()
    sns.boxplot(data=d, orient='vertical')
    ax.set_ylim(-1,2)
    

    【讨论】:

    • 感谢您的建议。我已经改变了我的规模。图片已添加到问题中。但是整个框仍然没有显示出来。
    • 有什么办法解决吗?我在这里尝试了 2 个答案,但仍然没有显示箱形图
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2013-03-17
    相关资源
    最近更新 更多