阅读: 2023/6/15 15:00:46
作者 / 七八分
公众号 / 叮当学术
发布计算机辅助药物设计相关知识,分享分子模拟软件教程及各类科研干货。轻松科研,简单生活~
全文共3059字,推荐阅读时间3分钟。
在数据可视化的领域,直方图作为一种常用的图表类型,可以帮助我们理解和揭示数据的分布情况。而Seaborn作为一个强大的Python数据可视化库,提供了简单易用且美观的函数,使绘制直方图变得轻而易举。笔者最近在学习Python,本文就记录一下如何使用Seaborn绘制直方图,以及如何根据需要进行进一步的定制。
直方图简介
直方图是一种用于展示数据分布情况的图表类型。它将数据划分为若干等宽的区间(也称为"箱子"或"柱"),并统计每个区间中数据的数量或频率。直方图的横轴代表数据的取值范围,纵轴则表示数据的频数或频率。通过直方图,我们可以了解数据的中心趋势、偏斜程度和异常值等重要信息。
Seaborn简介
Seaborn是建立在Matplotlib之上的Python数据可视化库,在 Matplotlib 的基础上,进行了更高级的封装,旨在提供更高级、更美观的图形界面。Seaborn的设计原则是简单性、一致性和美观性。即便是没有什么基础的人,也能通过极简的代码,做出具有分析价值而又十分美观的图形,作图更加方便快捷。它内置了许多常用的数据可视化类型,包括直方图、散点图、线图等,并提供了丰富的定制选项,使用户能够轻松地调整图形的外观和风格。
绘制直方图
下面就为大家介绍直方图的绘制方法,只需要很简单的代码:
首先导入需要的绘图模块:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
下面导入数据,最常见的便是Excel的.xlsx文件了,当然也可以是其它的文件格式,导入时提供文件名及sheet名,可以print出来看一下数据有没有问题。
#读取数据
df = pd.read_excel('titanic.xlsx','sheetname')
print(df)
这里笔者使用的是Seaborn的内置数据,将其复制到了Excel中,如果是做练习,也可直接调用:
titanic=sns.load_dataset('titanic')
数据内容如下:
survived pclass sex age sibsp parch fare embarked class \
0 0 3 male 22.0 1 0 7.2500 S Third
1 1 1 female 38.0 1 0 71.2833 C First
2 1 3 female 26.0 0 0 7.9250 S Third
3 1 1 female 35.0 1 0 53.1000 S First
4 0 3 male 35.0 0 0 8.0500 S Third
.. ... ... ... ... ... ... ... ... ...
886 0 2 male 27.0 0 0 13.0000 S Second
887 1 1 female 19.0 0 0 30.0000 S First
888 0 3 female NaN 1 2 23.4500 S Third
889 1 1 male 26.0 0 0 30.0000 C First
890 0 3 male 32.0 0 0 7.7500 Q Third
who adult_male deck embark_town alive alone
0 man True NaN Southampton no False
1 woman False C Cherbourg yes False
2 woman False NaN Southampton yes True
3 woman False C Southampton yes False
4 man True NaN Southampton no True
.. ... ... ... ... ... ...
886 man True NaN Southampton no True
887 woman False B Southampton yes True
888 woman False NaN Southampton no False
889 man True C Cherbourg yes True
890 man True NaN Queenstown no True
[891 rows x 15 columns]
需要注意的是,该示例数据中“age”一列有缺失的值,如果需要使用该列数据绘制图形,需要先做一个缺失值的去除,可以直接使用dropna() 方法删掉存在缺失值的数据:
#去除“age”列的缺失值
new_age=df['age'].dropna()
下面设置画布的大小,风格,字体及其大小,根据需要设置即可。
#设置画布的大小、绘图风格、字体类型和大小
sns.set_theme(style='white',font='Arial',font_scale=1.2,rc={'figure.figsize':(8,4)})
接下来就可以直接绘制直方图了,这里笔者选择绘制直方图的同时拟合密度曲线,方便观察数据分布的变化规律;并且提供了颜色代码,设置图形的颜色;如果数据量很大,可以通过“log_scale”参数设置x轴或y轴是否log处理。
#绘制直方图+密度曲线
sns.histplot(data=df, x=new_age,kde=True,bins=30,log_scale=(False, False),color="#4CB391",)
此时绘制的图形如下:
如果不需要密度曲线,可以将上面代码的“kde=True”更改为“kde=False”,默认为“True”。
代码中的“bins”可控制分布柱形的数量,如增加数量:
sns.histplot(data=df, x=new_age,kde=True,bins=100,log_scale=(False, False),color="#4CB391",)
还可以对图形最更细节的修改,如更改x轴或y轴的名称,更改x轴和y轴标签的字体和大小等。
#更改x轴或y轴的名称
plt.xlabel('New_name')
plt.ylabel('New_Count')
# 更改x轴和y轴标签的字体和大小
plt.xticks(fontname='Arial', fontsize=12)
plt.yticks(fontname='Arial', fontsize=12)
最后,可以将绘制好的图形保存,也可选择其它格式图像保存;通过“bbox_inches='tight'”来避免保存时部分文字被遮挡的情况。
plt.savefig('Histogram.png',dpi=600,bbox_inches='tight')
完整的代码如下:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
#去除“age”列的缺失值
new_age=df['age'].dropna()
#设置画布的大小、绘图风格、字体类型和大小
sns.set_theme(style='white',font='Arial',font_scale=1.2,rc={'figure.figsize':(8,4)})
#绘制直方图+密度曲线
sns.histplot(data=df, x=new_age,kde=True,bins=30,log_scale=(False, False),color="#4CB391",)
#导出图像,设置dpi为600
plt.savefig('Histogram.png',dpi=600,bbox_inches='tight')
以上就是本期内容为大家分享的使用python绘制直方图的全部内容了。
转自:“叮当学术”微信公众号
如有侵权,请联系本站删除!