直方图一般用来观察数据的分布形态,横坐标代表数值的均匀分段,纵坐标代表每个段内的观测数量(频数)。一般直方图都会与核密度图搭配使用,目的是更加清晰地掌握数据的分布特征,下面将详细介绍该类型图形的绘制。

1.matplotlib模块

matplotlib模块中的hist函数就是用来绘制直方图的。关于该函数的语法及参数含义如下:

plt.hist(x, bins=10, range=None, normed=False,

weights=None, cumulative=False, bottom=None,

histtype='bar', align='mid', orientation='vertical',

rwidth=None, log=False, color=None,

label=None, stacked=False)

x:指定要绘制直方图的数据。

bins:指定直方图条形的个数。

range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值。

normed:是否将直方图的频数转换成频率。

weights:该参数可为每一个数据点设置权重。

cumulative:是否需要计算累计频数或频率。

bottom:可以为直方图的每个条形添加基准线,默认为0。

histtype:指定直方图的类型,默认为bar,除此之外,还有barstacked、step和stepfilled。

align:设置条形边界值的对齐方式,默认为mid,另外还有left和right。

orientation:设置直方图的摆放方向,默认为垂直方向。

rwidth:设置直方图条形的宽度。

log:是否需要对绘图数据进行log变换。

color:设置直方图的填充色。

edgecolor:设置直方图边框色。

label:设置直方图的标签,可通过legend展示其图例。

stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放。

这里不妨以Titanic数据集为例绘制乘客的年龄直方图,具体代码如下:

import pandas as pd

import matplotlib.pyplot as plt

# 读入数据

Titanic = pd.read_excel(r'泰坦尼克号乘客年龄分布.xlsx')

# 检查年龄是否有缺失

any(Titanic.Age.isnull())

# 不妨删除含有缺失年龄的观察

Titanic.dropna(subset=['Age'], inplace=True)

#设置绘图风格

plt.style.use('ggplot')

#处理中文乱码

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

#坐标轴负号的处理

plt.rcParams['axes.unicode_minus']=False

# 绘制直方图

plt.hist(x = Titanic.Age, # 指定绘图数据

bins = 20, # 指定直方图中条块的个数

color = 'steelblue', # 指定直方图的填充色

edgecolor = 'black' # 指定直方图的边框色

)

# 添加x轴和y轴标签

plt.xlabel('年龄')

plt.ylabel('频数')

# 添加标题

plt.title('泰坦尼克号乘客年龄分布')

# 显示图形

plt.show()

运行结果:

如上图所示,就是关于乘客年龄的直方图分布。需要注意的是,如果原始数据集中存在缺失值,一定要对缺失观测进行删除或替换,否则无法绘制成功。如果在直方图的基础上再添加核密度图,通过matplotlib模块就比较吃力了,因为首先得计算出每一个年龄对应的核密度值。为了简单起见,下面利用pandas模块中的plot方法将直方图和核密度图绘制到一起。

2.pandas模块

import pandas as pd

import matplotlib.pyplot as plt

# 读入数据

Titanic = pd.read_excel(r'泰坦尼克号乘客年龄分布.xlsx')

# 检查年龄是否有缺失

any(Titanic.Age.isnull())

# 不妨删除含有缺失年龄的观察

Titanic.dropna(subset=['Age'], inplace=True)

#设置绘图风格

plt.style.use('ggplot')

#处理中文乱码

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

#坐标轴负号的处理

plt.rcParams['axes.unicode_minus']=False

# 绘制直方图

Titanic.Age.plot(kind = 'hist', bins = 20, color = 'steelblue', edgecolor = 'black', density = True, label = '直方图')

# 绘制核密度图

Titanic.Age.plot(kind = 'kde', color = 'red', label = '核密度图')

# 添加x轴和y轴标签

plt.xlabel('年龄')

plt.ylabel('频数')

# 添加标题

plt.title('泰坦尼克号乘客年龄分布')

# 显示图例

plt.legend()

# 显示图形

plt.show()

如上图所示,Python的核心代码就两行,分别是利用plot方法绘制直方图和核密度图。需要注意的是,在直方图的基础上添加核密度图,必须将直方图的频数更改为频率,即normed(新版本为density)参数设置为True。

3.seaborn模块

尽管上一幅图满足了两种图形的合成,但其表达的是所有乘客的年龄分布,如果按性别分组,研究不同性别下年龄分布的差异,该如何实现?针对这个问题,使用matplotlib模块或pandas模块都会稍微复杂一些,推荐使用seaborn模块中的distplot函数,因为该函数的代码简洁而易懂。关于该函数的语法和参数含义如下:

sns.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None,

hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None,

color=None, vertical=False, norm_hist=False, axlabel=None,

label=None, ax=None)

a:指定绘图数据,可以是序列、一维数组或列表。

bins:指定直方图条形的个数。

hist:bool类型的参数,是否绘制直方图,默认为True。

kde:bool类型的参数,是否绘制核密度图,默认为True。

rug:bool类型的参数,是否绘制须图(如果数据比较密集,该参数比较有用),默认为False。

fit:指定一个随机分布对象(需调用scipy模块中的随机分布函数),用于绘制随机分布的概率密度曲线。

hist_kws:以字典形式传递直方图的其他修饰属性,如填充色、边框色、宽度等。

kde_kws:以字典形式传递核密度图的其他修饰属性,如线的颜色、线的类型等。

rug_kws:以字典形式传递须图的其他修饰属性,如线的颜色、线的宽度等。

fit_kws:以字典形式传递概率密度曲线的其他修饰属性,如线条颜色、形状、宽度等。

color:指定图形的颜色,除了随机分布曲线的颜色。

vertical:bool类型的参数,是否将图形垂直显示,默认为True。(改为False即为horizontal)

norm_hist:bool类型的参数,是否将频数更改为频率,默认为False。

axlabel:用于显示轴标签。 label:指定图形的图例,需结合plt.legend()一起使用。

ax:指定子图的位置。

从函数的参数可知,通过该函数,可以实现三种图形的合成,分别是直方图(hist参数)、核密度曲线(kde参数)以及指定的理论分布密度曲线(fit参数)。接下来,针对如上介绍的distplot函数,绘制不同性别下乘客的年龄分布图,具体代码如下:

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

# 读入数据

Titanic = pd.read_excel(r'泰坦尼克号乘客年龄分布.xlsx')

# 检查年龄是否有缺失

any(Titanic.Age.isnull())

# 不妨删除含有缺失年龄的观察

Titanic.dropna(subset=['Age'], inplace=True)

#设置绘图风格

plt.style.use('ggplot')

#处理中文乱码

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

#坐标轴负号的处理

plt.rcParams['axes.unicode_minus']=False

# 取出男性年龄

Age_Male = Titanic.Age[Titanic.Sex == 'male']

# 取出女性年龄

Age_Female = Titanic.Age[Titanic.Sex == 'female']

# seaborn模块绘制分组的直方图和核密度图

# 绘制男女乘客年龄的直方图

sns.distplot(Age_Male, bins = 20, kde = False, hist_kws = {'color':'steelblue'}, label = '男性')

# 绘制女性年龄的直方图

sns.distplot(Age_Female, bins = 20, kde = False, hist_kws = {'color':'purple'}, label = '女性')

plt.title('泰坦尼克号男女乘客的年龄直方图')

plt.xlabel('年龄')

plt.ylabel('频数')

# 显示图例

plt.legend()

# 显示图形

plt.show()

# 绘制男女乘客年龄的核密度图

sns.distplot(Age_Male, hist = False, kde_kws = {'color':'red', 'linestyle':'-'},

norm_hist = True, label = '男性')

# 绘制女性年龄的核密度图

sns.distplot(Age_Female, hist = False, kde_kws = {'color':'black', 'linestyle':'--'},

norm_hist = True, label = '女性')

plt.title('泰坦尼克号男女乘客的年龄核密度图')

plt.xlabel('年龄')

plt.ylabel('核密度值')

# 显示图例

plt.legend()

# 显示图形

plt.show()

如图所示,为了避免四个图形混在一起不易发现数据背后的特征,将直方图与核密度图分开绘制。从直方图来看,女性年龄的分布明显比男性矮,说明在各年龄段下,男性乘客要比女性乘客多;再看核密度图,男女性别的年龄分布趋势比较接近,说明各年龄段下的男女乘客人数同步增加或减少。

把两种图合在一起画:

【注意】:直方图由频数改为频率

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

# 读入数据

Titanic = pd.read_excel(r'泰坦尼克号乘客年龄分布.xlsx')

# 检查年龄是否有缺失

any(Titanic.Age.isnull())

# 不妨删除含有缺失年龄的观察

Titanic.dropna(subset=['Age'], inplace=True)

#设置绘图风格

plt.style.use('ggplot')

#处理中文乱码

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

#坐标轴负号的处理

plt.rcParams['axes.unicode_minus']=False

# 取出男性年龄

Age_Male = Titanic.Age[Titanic.Sex == 'male']

# 取出女性年龄

Age_Female = Titanic.Age[Titanic.Sex == 'female']

# seaborn模块绘制分组的直方图和核密度图

# 绘制男女乘客年龄的直方图

sns.distplot(Age_Male, bins = 20, kde = False, hist_kws = {'color':'steelblue'},

label = ('男性','直方图'),norm_hist=True)

# 绘制女性年龄的直方图

sns.distplot(Age_Female, bins = 20, kde = False, hist_kws = {'color':'purple'},

label = ('女性','直方图'),norm_hist=True)

# 绘制男女乘客年龄的核密度图

sns.distplot(Age_Male, hist = False, kde_kws = {'color':'red', 'linestyle':'-'},

norm_hist = True, label = ('男性','核密度图'))

# 绘制女性年龄的核密度图

sns.distplot(Age_Female, hist = False, kde_kws = {'color':'black', 'linestyle':'--'},

norm_hist = True, label = ('女性','核密度图'))

plt.title('泰坦尼克号男女乘客的年龄分布图')

plt.xlabel('年龄')

plt.ylabel('核密度值')

# 显示图例

plt.legend()

# 显示图形

plt.show()

直方图python_Python数据可视化的例子——直方图和核密度曲线相关推荐

  1. Python数据可视化的例子——直方图(hist)和核密度曲线(kde)

    直方图一般用来观察数据的分布形态,横坐标代表数值的均匀分段,纵坐标代表每个段内的观测数量(频数).一般直方图都会与核密度图搭配使用,目的是更加清晰地掌握数据的分布特征,下面将详细介绍该类型图形的绘制. ...

  2. Python数据科学包(六)-----数据可视化和例子

    文章目录 一. 数据可视化 1. 线型图 2. 柱状图 3. 直方图 4. 密度图 5. 散布图 6. 饼图 7. 高级绘图 二. 股票数据分析 1. 分析波动幅度 2. 增长曲线 3. 增长倍数 4 ...

  3. Python数据可视化的例子——画图总结

    前面写了大量的文章是关于数据的可视化,通过每一个具体的案例介绍了有关matplotlib模块.pandas模块和seaborn模块的绘图函数和参数含义,分别针对离散型数据.数值型数据和关系型数据讲解了 ...

  4. scatter python_python数据可视化(matplotlib、scatter)

    数据可视化 1.matplotlib Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式.这里将会探索 matplo ...

  5. 绘制棒棒糖用python_Python数据可视化:绘制持仓榜单的“棒棒糖图” - 松鼠爱吃饼干...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 荔枝 | 作者 Crossin的编程教室 | 来源 1. 需求 做股票分析 ...

  6. 强推!十大顶级大数据可视化工具 | 程序员硬核评测

    戳蓝字"CSDN云计算"关注我们哦! 程序员硬核评测:客观.高效.不说软话.无论是技术质量.性能水平,还是工具筛选,一测便知! 编译作者:风车云马 前言 Salesforce公司的 ...

  7. python读取csv数据画直方图_Python数据可视化(Pygal、svg、csv、Bar、Line)

    一.pygal(图表类型Bar) 将使用Python可视化包Pygal来生成可缩放的矢量图形文件 pygal官方文档:[www.pygal.org/en/stable/](http://www.pyg ...

  8. python excel数据分析画直方图 饼状图_Excel数据可视化应用(直方图、折线图、饼状图)...

    直方图:对比关系 直方图是一种统计报告图,是表示资料变化情况的主要工具.直方图由一系列高度不等的的纵向条纹或线段表示数据分布的情况.一般用横轴表示数据类型,纵轴表示分布情况. 例1: 1.右键单击图表 ...

  9. 【Python入门可视化】:22个完整数据可视化小例子,带你玩转可视化~

    总共22个完整的pyecharts例子,包含常用的配置方法,每个小例子都包含完整代码,为避免混淆,每个例子都差不多只包含单一配置的代码,更多有趣的源码分享可以在评论区回复. 1. 柱状图堆叠 不同系列 ...

  10. Python数据可视化的例子——多个图形的合并

    工作中往往会根据业务需求,将绘制的多个图形组合到一个大图框内,形成类似仪表板的效果.针对这种情况,如何应用Python将前面所学的各种图形汇总到一个图表中,这将是本节所要学习的重点. 关于多种图形的组 ...

最新文章

  1. PHP Countable接口
  2. 80热敏打印机打印TxPrnMod.dll
  3. log4j2入门(四) log4j2.xml配置文件详细实例
  4. python PyQt5 QLCDNumber类(用于显示数字或一些符号的容器)
  5. oracle 01405 提取的值为null,ORA-01405: 提取的列值为 NULL--报错原因及解决方案
  6. ASP.NET2.0导出Word文档(C#导出DOC)
  7. C++基础11-类和对象之操作符重载2
  8. Python学习笔记:动态添加与删除属性与方法
  9. 【干货】华为组织成长的动力机制.pdf(附下载链接)
  10. 力扣-547 省份数量
  11. 匿名管道 与 命名管道
  12. 【机器学习】回归误差:MSE、RMSE、MAE、R2、Adjusted R2 +方差、协方差、标准差(标准偏差/均方差)、均方误差、均方根误差(标准误差)、均方根解释
  13. Apple Pencil有必要买正版吗?Apple Pencil平替推荐
  14. 如何选择计算机硬件,如何选择计算机硬件?盲目选择硬件只会导致您的计算机被提前淘汰!...
  15. 微信小程序实现海报功能经历
  16. 知道创宇爬虫题--代码持续更新中
  17. 国产分布式数据库在证券行业的应用及实践
  18. 内部基因决定拼购品质,苏宁拼购或将成为行业发展新标杆
  19. PostgreSQL 源码解读(212)- 后台进程#11(checkpointer-SyncOneBuffer)
  20. 数学公式公式获取工具 Mathpix snipping Tool

热门文章

  1. 北大计算机复试被刷经历,为什么那么多高分被刷?复试真的有黑幕吗?
  2. 【钉钉-场景化能力包】自有OA审批助力费控报销
  3. 中国网页游戏行业调研与分析
  4. 繁凡的ACM模板(满注释模板)
  5. 计算机电源故障维修方法,atx电源维修方法 atx电源常见故障【详细介绍】
  6. 硬盘克隆 计算机更换硬盘,换硬盘数据怎么办 看一招本地磁盘对拷
  7. struts2与常用表格ajax操作的json传值问题
  8. python 排列 组合_python实现排列和组合
  9. 虚拟机VirtualBox下载与安装、安装Ubuntu超详细图文步骤,对一些配置问题也有所写。
  10. SQLite忽略大小写