前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据处理从零开始----第四章(可视化)(17)一文解决箱型图box plot

Python数据处理从零开始----第四章(可视化)(17)一文解决箱型图box plot

作者头像
用户1359560
发布2020-02-18 12:39:54
1.1K0
发布2020-02-18 12:39:54
举报
文章被收录于专栏:生信小驿站

(1)输入数据

所使用的是经典的iris数据, 包括有sepal_length, sepal_width, petal_length,petal_width和 species五个变量,其中前四个为数字变量,最后一个为分类变量

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')
df.head()
Out[25]: 
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

(2)绘制基础图形

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')

# Make boxplot for one group only
sns.boxplot( y=df["sepal_length"] )
#sns.plt.show()

(3)绘制经典box图

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')
 
sns.boxplot( x=df["species"], y=df["sepal_length"] )
#sns.plt.show()

(4)绘制水平横放的box图

代码语言:javascript
复制
# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# Just switch x and y
sns.boxplot( y=df["species"], x=df["sepal_length"] )
#sns.plt.show()

(5)设置线条宽度

代码语言:javascript
复制
# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# Change line width
sns.boxplot( x=df["species"], y=df["sepal_length"], linewidth=5)
#sns.plt.show()

(6)添加notch缺口box图

代码语言:javascript
复制
# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# Add notch
sns.boxplot( x=df["species"], y=df["sepal_length"], notch=True)
#sns.plt.show()

(7)设置箱型图box plot的大小size

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')
 
# Change width
sns.boxplot( x=df["species"], y=df["sepal_length"], width=0.3)

(8)修改箱型图颜色:基于corlorplatte

代码语言:javascript
复制
# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# Use a color palette
sns.boxplot( x=df["species"], y=df["sepal_length"], palette="Blues")
#sns.plt.show()

(9)设置箱型图box plot颜色为选定的某一种颜色

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')
sns.boxplot( x=df["species"], y=df["sepal_length"], color="skyblue")
#sns.plt.show()

b: blue;g: green;r: red;c: cyan;m: magenta;y: yellow;k: black;w: white

(10)设置箱型图box plot颜色:为不同分组选定不同的颜色

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')
my_pal = {"versicolor": "g", "setosa": "b", "virginica":"m"}
sns.boxplot( x=df["species"], y=df["sepal_length"], palette=my_pal)
#sns.plt.show()

(11)设置箱型图box plot颜色:高亮突出某一个分组

代码语言:javascript
复制
# Highlight a group
import seaborn as sns
df = sns.load_dataset('iris')
my_pal = {species: "r" if species == "versicolor" else "b" for species in df.species.unique()}
sns.boxplot( x=df["species"], y=df["sepal_length"], palette=my_pal)
#sns.plt.show()

(12)设置亚型分组箱型图box plot

当我们同时有一个numerical variable,许多个 groups, 还有一个subgroups, 我们这个时候就需要分组小提琴图,也就是 grouped violinplot。场景示例:我们想知道男女两类患者,在青少年、中年、老年这三个年龄阶段,在肺癌发病率的分布

代码语言:javascript
复制
 # library and dataset
import seaborn as sns
df = sns.load_dataset('tips')

# Grouped boxplot
sns.boxplot(x="day", y="total_bill", hue="smoker", data=df, palette="Set1")
#sns.plt.show()

我们可以看出在Fri上,吸烟者和不吸烟者total_bill的差别很大。而在Thur上,吸烟者和不吸烟者total_bill的差别很小。

(13)设置箱型图的顺序:根据自己设置的顺序

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')

# specific order
p1=sns.boxplot(x='species', y='sepal_length', data=df, order=["virginica", "versicolor", "setosa"])
#sns.plt.show()

这里我们设置的是 "virginica","versicolor", "setosa",也就是说先展示virginica组的数据,最后展示setosa组的数据。

(14)设置箱型图的顺序:根据median中位数

代码语言:javascript
复制
import seaborn as sns
df = sns.load_dataset('iris')

# Find the order
my_order = df.groupby(by=["species"])["sepal_length"].median().iloc[::-1].index

# Give it to the boxplot
sns.boxplot(x='species', y='sepal_length', data=df, order=my_order)

Boxplot是对数据分布进行可视化的绝佳方法。但是,请注意,箱型图可以隐藏单个数据的值。因此,强烈建议在箱线图中显示所有观察结果值。而如果有许多观察结果,小提琴图可能是一个有趣的选择。 (15)在箱型图上添加数据点

代码语言:javascript
复制
# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')
 
# Usual boxplot
ax = sns.boxplot(x='species', y='sepal_length', data=df)
 
# Add jitter with the swarmplot function.
ax = sns.swarmplot(x='species', y='sepal_length', data=df, color="grey")

(16)在箱型图上添加观察值数量(每个分组的观察值总数)

代码语言:javascript
复制
# library & dataset
import seaborn as sns, numpy as np
df = sns.load_dataset("iris")

ax = sns.boxplot(x="species", y="sepal_length", data=df)

# Calculate number of obs per group & median to position labels
medians = df.groupby(['species'])['sepal_length'].median().values
nobs = df['species'].value_counts().values
nobs = [str(x) for x in nobs.tolist()]
nobs = ["n: " + i for i in nobs]

# Add it to the plot
pos = range(len(nobs))
for tick,label in zip(pos,ax.get_xticklabels()):
 ax.text(pos[tick], medians[tick] + 0.03, nobs[tick],
horizontalalignment='center', size='x-small', color='w', weight='semibold')

我们可以看出setosa组共计有50个观察值observation。而versicolor和virginica组也有50个观察值。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档