Matplotlib绘制直方图

Matplotlib绘制直方图

利用Jupter Notebook 绘制直方图图,主要介绍如何使用matplotlib库中的各种方法绘制频数直方图和频率直方图,以及对图形的修饰。

通过泰坦尼克乘客数据和电影时长数据作为载体

案例一:乘客年龄分布频数直方图

# 导入第三方库
import pandas as pd
import matplotlib.pyplot as plt

# 设置中文
plt.rcParams['font.sans-serif'] = ['SimHei']

# 创建图形
plt.figure(figsize=(20,8),dpi=80)

# 准备数据(读取Titanic数据集)
titanic = pd.read_csv(r'E:\PythonData\exercise_data\train.csv')

# 检查年龄是否有缺失
any(titanic.Age.isnull())

# 删除含有缺失年龄的观察
titanic.dropna(subset=['Age'], inplace=True)

# 绘图:乘客年龄的频数直方图
plt.hist(titanic.Age, # 绘图数据
        bins = 20, # 指定直方图的条形数为20个
        color = 'steelblue', # 指定填充色
        edgecolor = 'k', # 设置直方图边界颜色
        label = '直方图'
        )# 为直方图呈现标签

# 刻度设置
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

# 添加描述信息
plt.xlabel('年龄:岁',fontsize=20)
plt.ylabel('人数:个',fontsize=20)
plt.title('乘客年龄分布',fontsize=20)

# 显示图形
plt.show()

在这里插入图片描述

案例二:乘客年龄累计频数直方图

# 导入第三方库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 设置中文
plt.rcParams['font.sans-serif'] = ['SimHei']

# 创建图形
plt.figure(figsize=(20,8),dpi=80)

# 绘图:乘客年龄的累计频率直方图
plt.hist(titanic.Age, # 绘图数据
        bins = np.arange(titanic.Age.min(),titanic.Age.max(),5), # 指定直方图的组距
        cumulative = True, # 积累直方图
        color = 'steelblue', # 指定填充色
        edgecolor = 'k', # 指定直方图的边界色
        label = '直方图' )# 为直方图呈现标签

# 设置刻度
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)

# 设置坐标轴标签和标题
plt.title('乘客年龄的频率累计直方图',fontsize=20)
plt.xlabel('年龄',fontsize=20)
plt.ylabel('累计频率',fontsize=20)

# 显示图形
plt.show()

案例三:男女乘客年龄分布直方图

# 导入库
import matplotlib.pyplot as plt
import numpy as np

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 创建图形
plt.figure(figsize=(20,8),dpi=80)

# 提取不同性别的年龄数据
age_female = titanic.Age[titanic.Sex == 'female']
age_male = titanic.Age[titanic.Sex == 'male']

# 设置直方图的组距
bins = np.arange(titanic.Age.min(), titanic.Age.max(), 2)

# 男性乘客年龄直方图
plt.hist(age_male, bins = bins, label = '男性',edgecolor = 'k', color = 'steelblue', alpha = 0.7)

# 女性乘客年龄直方图
plt.hist(age_female, bins = bins, label = '女性',edgecolor = 'k', alpha = 0.6,color='r')

# 调整刻度
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

# 设置坐标轴标签和标题
plt.title('男女乘客年龄直方图',fontsize=20)
plt.xlabel('年龄',fontsize=20)
plt.ylabel('人数',fontsize=20)

# 去除图形顶部边界和右边界的刻度
plt.tick_params(top='off', right='off')

# 显示图例
plt.legend(loc='best',fontsize=20)

# 显示图形
plt.show()

在这里插入图片描述

案例四:电影时长分布频率直方图

# 导入库
import matplotlib.pyplot as plt

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 创建图形
plt.figure(figsize=(20,8),dpi=80)

# 准备数据
time=[131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,
   134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,
   137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,
   132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,
   123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111, 100,154,136,100,118,119,133,134,106,129,126,110,111,109,
   141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,
   117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146, 133,101,131,116,
   111, 84,137,115,122,106,144,109,123,116,111,111,133,150]
# 设置组距
bins=2

groups = int((max(time)-min(time))/bins)

# 绘制直方图
plt.hist(time,groups,color='b',
            edgecolor = 'k',
        density = True) # 指定直方从图的边界色)

# 调整刻度
plt.xticks(list(range(min(time),max(time)))[::2],fontsize=15)
plt.yticks(fontsize=15)

# 添加描述信息
plt.xlabel('电影时长:分钟',fontsize=20)
plt.ylabel('电影数量占比',fontsize=20)

# 增加网格
plt.grid(True,linestyle='--',alpha=1)

# 添加标题
plt.title('电影时长分布直方图',fontsize=20)

plt.show()

在这里插入图片描述

总结:注意频数直方图和频率直方图之间的区别,频数直方图的y轴表示落在不同小组的数据个数为该组的频数,而频率直方图的y轴表示频率/组距,频率/组距乘以组距的大小(即频率)反映了各组频数在数据总数中的占比。
前三个案例的数据连接如下:

链接: https://pan.baidu.com/s/1BsAOrdP5tmQlfsBKNNNBXw.
提取码:nf3a


版权声明:本文为coffeetogether原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。