欢迎关注笔者的微信公众号
箱线图是一种强大的数据可视化工具,用于了解数据的分布。它将数据分成四分位数,并根据从这些四分位数得出的五个数字对其进行汇总:
中位数:数据的中间值。标记为 Q2,描绘了第 50 个百分点。
第一个四分位数:“最小非异常值”和中位数之间的中间值。标记为 Q1,描绘了第 25 个百分点。
第三四分位数:“最大非异常值”和中位数之间的中间值。标记为 Q3,描绘了第 75 个百分点。
“最大非异常值”:按 (Q3 + 1.5*IQR) 计算。高于此值的所有值都被视为异常值。
“最小非异常值”:按 (Q1 – 1.5*IQR) 计算。低于此值的所有值都被视为异常值。
它还可以表示数据的对称性、偏度和分布。
箱型图的功能:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
sns.set(font="SimHei")
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# load the dataset
df = sns.load_dataset('tips')
df.head(10)
tips
是Seaborn官方的一个数据集,首次会从github远程仓库下载到用户目录,如果出现超时可手动使用下面的镜像加速网址下载官方数据集并放到用户目录下,如/home/sairo/seaborn-data
https://github.com.cnpmjs.org/mwaskom/seaborn-data.git
df.boxplot(by="day", column=["total_bill"])
df.boxplot(by="size", column=["tip"], grid=False)
tips = sns.load_dataset("tips")
tips.head()
# Draw a vertical boxplot grouped
# by a categorical variable:
sns.set_style("whitegrid")
sns.boxplot(x="day", y="total_bill", data=tips)
箱线图用于可视化数据分布,这在需要比较数据时非常有用。有时,箱线图也称为箱线图。该框显示了数据集的四分位数,而胡须延伸以显示分布的其余部分。在本文中,我们将使用 python 使用 seaborn 实现水平箱线图。
Seaborn 使用 boxplot() 方法绘制箱线图。我们可以通过两种方法将箱线图变成水平箱线图,我们需要切换x和y属性并将其传递给boxplot()方法,另一种是使用orient="h"
选项传递给boxplot() 方法。
# import library & dataset
import seaborn as sns
df = sns.load_dataset("iris")
# Just switch x and y
plt.Figure(dpi=300)
sns.boxplot(y=df["species"], x=df["sepal_length"])
orient = h
# import library & dataset
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.boxplot(data=tips, orient="h", palette="Set2")
为您的数据可视化添加正确的颜色集使其更令人印象深刻和可读,seaborn 调色板使您可以轻松地在您的可视化中使用颜色。在本文中,我们将看到如何使用 seaborn 调色板为箱线图着色,还将了解 seaborn 调色板的用途,它也可以应用于其他绘图。
# import libraries
import matplotlib.pyplot as plt
import seaborn as sns
ds = sns.load_dataset("iris")
ax = sns.boxplot(data=tips, orient="h")
Seaborn boxplot() 函数有调色板参数,在这个例子中我们设置了palette=”Set1″,它使用定性调色板来给boxplot中的框上色。所以在 boxplot 方法中添加调色板参数。
# use palette method
ax = sns.boxplot(data=ds, orient="h", palette="Set1")
本节使用官方提供的泰坦尼克数据集
# importing useful libraries
import matplotlib.pyplot as plt
import seaborn as sns
# using titanic dataset from
# seaborn library
df = sns.load_dataset("titanic")
# to see first 5 rows of dataset
df.head()
# to plot a boxplot of
# age vs survived feature
plt.figure(figsize=(10, 8))
sns.boxplot(x="survived", y="age", data=df)
plt.ylabel("Age", size=14)
plt.xlabel("Survived", size=14)
plt.title("Titanic Dataset", size=18)
我们观察到中位数显示为四分位线,但未显示平均值。
showmeans
设置为 True。# boxplot with showmeans
plt.figure(figsize=(10, 8))
sns.boxplot(x="survived", y="age", data=df, showmeans=True) # notice the change
plt.ylabel("Age", size=14)
plt.xlabel("Survived", size=14)
plt.title("Titanic Dataset", size=18)
meanprops
关键字参数,如下面的代码所示。# customizing using meanprops
plt.figure(figsize=(10, 8))
sns.boxplot(
x="survived",
y="age",
data=df,
showmeans=True,
meanprops={"marker": "+", "markeredgecolor": "black", "markersize": "10"},
)
plt.ylabel("Age", size=14)
plt.xlabel("Survived", size=14)
plt.title("Titanic Dataset", size=18)
# import required modules
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
# load dataset
tips = sns.load_dataset("tips")
# display top most rows
tips.head()
# illustrate box plot
fx = sns.boxplot(x="day", y="total_bill", data=tips, hue="sex", palette="Set2")
# illustrating box plot with order
fx = sns.boxplot(
x="day",
y="total_bill",
data=tips,
order=["Sun", "Sat", "Fri", "Thur"],
hue="sex",
palette="Set2",
)
分组箱线图用于可视化具有多个子组的数据。此外,我们可以使用分组箱线图一次可视化三个变量,其中一个变量是数字变量,另外两个变量是分类变量。 我们将使用 Python 的 Seaborn 库来创建分组箱线图。我们将使用来自 Seaborn 库的tip数据集。
# import seaborn library
import seaborn as sns
# load the dataset
data = sns.load_dataset("tips")
data.head(5)
示例 1:让我们创建一个箱线图来了解“tips”数据集的每一“天”上“total_bill”的分布。但我们也想根据“性别”属性对其进行分组。因此,我们将为这三个属性绘制分组箱线图,其中“sex”和“day”是分类属性,“total_bill”是数值属性。
sns.boxplot(x=data["day"], y=data["total_bill"], hue=data["sex"])
示例 2:下一个示例与上一个示例类似。唯一的区别是作为"smoker"属性的"hue"参数的值。在这里,我们想根据一个人是否吸烟来了解"total_bill"与"day"组的分布。
# create another grouped boxplot
sns.boxplot(x=data["day"], y=data["total_bill"], hue=data["smoker"], palette="Set2")
示例 3:在本示例中,我们将介绍如何绘制 2 个以上的分组箱线图。如果"hue"参数的值有 2 个以上的类别,那么我们可以绘制 2 个以上的分组箱线图,如下所示。 在这里,‘hue’ = data[‘size’] 有六个类别,因此我们可以使用与上述相同的方法看到 2 个以上的分组箱线图。
sns.boxplot(x=data["day"], y=data["total_bill"], hue=data["size"], palette="husl")
Plotly 是一个 Python 库,用于设计图形,尤其是交互式图形。它可以绘制各种图形和图表,如直方图、条形图、箱线图、展开图等等。它主要用于数据分析以及财务分析。
graph_objects
类的箱线图import plotly.graph_objects as go
import numpy as np
# creating random data through randomint
# function of numpy.random
np.random.seed(42)
random_y1= np.random.randint(1,101,100)
random_y2= np.random.randint(1,101,100)
x = ['A', 'B', 'C', 'D']
fig = go.Figure()
fig.add_trace(go.Box(y=random_y1))
fig.add_trace(go.Box(y=random_y2))
fig.show()
水平箱线图是一种箱线图,其中 x 变量和 y 值在图中水平显示。它可以通过传递箱线图的 x 参数来创建。
import plotly.graph_objects as go
import numpy as np
# creating random data through randomint
# function of numpy.random
np.random.seed(42)
random_x1= np.random.randint(1,101,100)
random_x2= np.random.randint(1,101,100)
x = ['A', 'B', 'C', 'D']
fig = go.Figure()
fig.add_trace(go.Box(x=random_x1))
fig.add_trace(go.Box(x=random_x2))
fig.show()
可以使用 boxmean 参数找到由boxplot
绘制的数据的平均值和标准偏差。它可以取两个值:
True
: 显示均值
sd
: 为标准差。
import plotly.graph_objects as go
import numpy as np
# creating random data through randomint
# function of numpy.random
np.random.seed(42)
random_x1= np.random.randint(1,101,100)
random_x2= np.random.randint(1,101,100)
x = ['A', 'B', 'C', 'D']
fig = go.Figure()
fig.add_trace(go.Box(x=random_x1, marker_color = 'indianred', boxmean=True))
fig.add_trace(go.Box(x=random_x2, marker_color='royalblue', boxmean='sd'))
fig.show()
选择四分位数的算法也可以在plotly中选择。默认使用线性算法计算。然而,它提供了两种以上的算法来做同样的事情,即包容性和排斥性。可以通过传递 quartilemethod
参数来完成。
import plotly.graph_objects as go
import numpy as np
# creating random data through randomint
# function of numpy.random
np.random.seed(42)
random_y= np.random.randint(1,101,100)
x = ['A', 'B', 'C', 'D']
fig = go.Figure()
fig.add_trace(go.Box(y=random_y, quartilemethod="linear", name="linear"))
fig.add_trace(go.Box(y=random_y, quartilemethod="inclusive", name="inclusive"))
fig.add_trace(go.Box(y=random_y, quartilemethod="exclusive", name="exclusive"))
fig.show()
可以使用 boxpoints
参数显示基础数据。这个参数的值可以是三种类型——
all
为所有点
outliers
仅异常值
false
不是以上任何一种
import plotly.graph_objects as go
import numpy as np
# creating random data through randomint
# function of numpy.random
np.random.seed(42)
random_y1= np.random.randint(1,101,100)
random_y2= np.random.randint(1,101,100)
x = ['A', 'B', 'C', 'D']
fig = go.Figure()
fig.add_trace(go.Box(y=random_y1, boxpoints="all"))
fig.add_trace(go.Box(y=random_y2, boxpoints="outliers"))
fig.show()