Matplotlib - 如何为一系列图设置ylim()?

GPB*_*GPB 5 python matplotlib boxplot

我有一系列我试图制作的箱形图,每个都有不同的范围.我尝试通过确定每个单独系列的最大值和最小值来设置ylim.然而,在许多情况下,min是异常值,因此绘图是压缩的.如何选择图表"胡须"使用的相同限制(加上小幅度)?

例如,现在我这样做:

[In]
ax = df['feature'].boxplot()
ymax = max(df['feature']
ymin = min(df['feature']
ax.set_ylim([ymax,ymin])
Run Code Online (Sandbox Code Playgroud)

我想将ymax,ymin设置为盒子图的胡须.

Joe*_*ton 7

作为@unutbu建议的替代方法,您可以避免绘制异常值,然后使用ax.margins(y=0)(或一些小的eps)来扩展晶须范围的限制.

例如:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.poisson(5, size=(100, 5)))

fig, ax = plt.subplots()
#Note showfliers=False is more readable, but requires a recent version iirc
box = df.boxplot(ax=ax, sym='') 
ax.margins(y=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你想在最大的"胡须"周围留出一些空间,可以使用ax.margins(0.05)增加5%的范围而不是0%的范围:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.poisson(5, size=(100, 5)))

fig, ax = plt.subplots()
box = df.boxplot(ax=ax, sym='')
ax.margins(y=0.05)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述