投稿问答最小化  关闭

万维书刊APP下载

Python科研绘图--使用Seaborn绘制直方图

2023/6/15 15:00:46  阅读:106 发布者:

作者 / 七八分

公众号 /  叮当学术

发布计算机辅助药物设计相关知识,分享分子模拟软件教程及各类科研干货。轻松科研,简单生活~

全文共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",)

#导出图像,设置dpi600

plt.savefig('Histogram.png',dpi=600,bbox_inches='tight')

以上就是本期内容为大家分享的使用python绘制直方图的全部内容了。

转自:“叮当学术”微信公众号

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com