如何更改 x/y 轴的缩放比例以在 pandas 数据框中绘制异常值?

问题描述 投票:0回答:3

在我尝试在散点图上绘制的一组数据点中,有几个巨大的异常点。作为参考,大多数值的范围在 0-100 之间,但偶尔会出现 100000 的异常点。因此,当我在散点图、箱线图或任何图上绘制图表时,它会缩小太多以适应所有情况0-100 之间 99% 的点看起来就像一个小点。有什么方法可以对其进行缩放,以便相应地缩放前 99% 的点,并让缩放跳至异常点的值,使其适合图表?

图表如下:

箱线图: Box Plot

散点图: Scatter Plot

pandas dataframe plot scatter-plot anomaly-detection
3个回答
0
投票

根据您的限制使用 plt.axis() 函数。

plt.axis([x_min, x_max, y_min, y_max]) 其中 x_min、x_max、y_min 和 y_max 是两个轴的坐标限制


0
投票

您可以设置 x/y 轴刻度来记录或仅设置 x/y 限制(例如使用

plt.xlim(0,200)
)以隐藏图表中的异常情况:

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('whitegrid')

plt.figure(figsize=(20,12))
data = [1,2,3,4,5,55,1,6,7,24,67,33,41,75,100_000,1_000_000]
plt.subplot(2,2,1)
plt.title('basic boxplot')
sns.boxplot(x=data, flierprops=dict(markerfacecolor='green', markersize=7))
plt.subplot(2,2,2)
plt.title('log x axis')
b = sns.boxplot(x=data, flierprops=dict(markerfacecolor='red', markersize=7))
b.set_xscale('log')
plt.subplot(2,2,3)
plt.title('basic scatter')
hue = ['outlier' if i > 100 else 'basic sample' for i in data]
sns.scatterplot(x=data, y=data, hue=hue)
plt.subplot(2,2,4)
plt.title('log x/y scatter')
s = sns.scatterplot(x=data, y=data, hue=hue)
s.set_xscale('log')
s.set_yscale('log')
plt.show()


0
投票

outset
可以帮助进行多尺度可视化以解释大量异常值。

示例

绘制所有数据,包括离群值,然后缩放面板仅显示非离群值。

example with outset axes

# adapted from https://stackoverflow.com/a/72778992/17332200
import matplotlib.pyplot as plt
import numpy as np
import outset as otst
import pandas as pd
import seaborn as sns

# Data Preparation
xdata = [1, 2, 3, 4, 5, 55, 1, 6, 7, 24, 67, 33, 41, 75, 100_000, 1_000_000]
ydata = xdata[1:] + xdata[:1]  # slightly vary from x coords for nice plot
outlier_thresh = 200

data = pd.DataFrame({"x": xdata, "y": ydata})
data["outlier"] = (data["x"] > outlier_thresh) | (data["y"] > outlier_thresh)

# Initialize an OutsetGrid object
outset_grid = otst.OutsetGrid(
    data=data,
    x="x",
    y="y",
    col="outlier",  # split plots based on outlier status
    col_order=[False],  # only magnify non-outlier data
    marqueeplot_source_kws={  # style zoom indicator elements
        "leader_stretch": 0.5,
        "leader_stretch_unit": "inches",
    },
)

outset_grid.map_dataframe(sns.scatterplot, x="x", y="y")

otst.inset_outsets(outset_grid)  # rearrange move outset axes on top of source
outset_grid.marqueeplot()  # render marquee annotations

这个两轴网格可以轻松地重新排列成插图。

只需在显示或保存之前添加以下行,

# rearrange to move outset axes on top of source
otst.inset_outsets(outset_grid)

outset.inset_outsets
提供 kwarg 选项来微调插入位置(如果需要)。

安装

要安装起始库,

python3 -m pip install outset

附加功能

除了上面显示的面向数据的缩放区域选择之外,该库还提供了显式 API 来手动指定缩放区域以及许多样式和布局选项。

请参阅开头快速入门指南图库了解更多信息。

披露:我是图书馆作者

© www.soinside.com 2019 - 2024. All rights reserved.