【绘制直方图】AttributeError: Rectangle.set() got an unexpected keyword argument ‘normed‘

绘制直方图:

当设置频率直方图或者正态分布曲线时出现bug
AttributeError: Rectangle.set() got an unexpected keyword argument ‘normed’


问题显示

情况一:
在这里插入图片描述
情况二:
在这里插入图片描述

原因分析:

情况一意思是没有这个关键词,normed:是否将直方图的频数转换成频率;既然用不了就把normed换成density,然后就出现情况二,原因是mlab中没有normpdf,然后把mlab.normpdf换成scipy.stats.pdf就可以解决了。

解决方案:

注意要引入scipy这个包

from scipy.stats import norm
density = norm.pdf(x1, titanic.Age.mean(), titanic.Age.std())

最后就成功解决了。
源代码展示:

# 导入第三方包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
from scipy.stats import norm

# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取Titanic数据集
titanic = pd.read_csv(r'E:\练习题数据集\exercise_data\train.csv')
# 检查年龄是否有缺失any(titanic.Age.isnull())
# 不妨删除含有缺失年龄的观察
titanic.dropna(subset=['Age'], inplace=True)

# 设置图形的显示风格
plt.style.use('ggplot')
# # 绘图:乘客年龄的频数直方图
# plt.hist(titanic.Age, # 绘图数据
#         bins = 20, # 指定直方图的条形数为20个
#         color = 'steelblue', # 指定填充色
#         edgecolor = 'k', # 指定直方图的边界色
#         label = '直方图' )# 为直方图呈现标签
#
# # 去除图形顶部边界和右边界的刻度
# # plt.tick_params(top='off', right='off')
# # 显示图例
# # plt.legend()
# plt.legend(loc = 'best')
# # 显示图形
# plt.show()
# 正太分布图
plt.hist(titanic.Age, # 绘图数据
        bins = np.arange(titanic.Age.min(),titanic.Age.max(),5), # 指定直方图的组距
        density = True, # 设置为频率直方图
        color = 'steelblue', # 指定填充色
        edgecolor = 'k') # 指定直方图的边界色

# 设置坐标轴标签和标题
plt.title('乘客年龄直方图')
plt.xlabel('年龄')
plt.ylabel('频率')

# 生成正态曲线的数据
x1 = np.linspace(titanic.Age.min(), titanic.Age.max(), 1000)
density = norm.pdf(x1, titanic.Age.mean(), titanic.Age.std())
# 绘制正态分布曲线
line1, = plt.plot(x1,density,'r-', linewidth = 2)

# 生成核密度曲线的数据
kde = mlab.GaussianKDE(titanic.Age)
x2 = np.linspace(titanic.Age.min(), titanic.Age.max(), 1000)
# 绘制
line2, = plt.plot(x2,kde(x2),'g-', linewidth = 2)

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

# 显示图例
plt.legend([line1, line2],['正态分布曲线','核密度曲线'],loc='best')
# 显示图形
plt.show()

你可能感兴趣的:(python,开发语言)