- 函数功能:判定数据(或特征)的分布情况
- 调用方法: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:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
- density:是否将直方图的频数转换成频率;
- weights:该参数可为每一个数据点设置权重;
- cumulative:是否需要计算累计频数或频率;
- bottom:可以为直方图的每个条形添加基准线,默认为0;
- histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;
- align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;
- orientation:设置直方图的摆放方向,默认为垂直方向;
- rwidth:设置直方图条形宽度的百分比;
- log:是否需要对绘图数据进行log变换;
- color:设置直方图的填充色;
- label:设置直方图的标签,可通过legend展示其图例;
- stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;
一、绘制简单直方图:默认为频数图,即纵轴表示频数
可通过参数density = True绘制频率图:
二、多组数据直方图:
data = np.random.randn(1000,2)
plt.hist(x = data, # 绘图数据
bins = 20, # 指定直方图的条形数为20个
edgecolor = 'w', # 指定直方图的边框色
color = ['c','r'], # 指定直方图的填充色
label = ['第一组','第二组'], # 为直方图呈现图例
density = False, # 是否将纵轴设置为密度,即频率
alpha = 0.6, # 透明度
rwidth = 1, # 直方图宽度百分比:0-1
stacked = False) # 当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放
ax = plt.gca() # 获取当前子图
ax.spines['right'].set_color('none') # 右边框设置无色
ax.spines['top'].set_color('none') # 上边框设置无色
# 显示图例
plt.legend()
# 显示图形
plt.show()
当参数stacked = True时:
三、绘制累计频率直方图:通过参数cumulative = True绘制
data = np.random.randn(1000)
plt.hist(data, # 绘图数据
bins = 20, # 指定直方图的组距
density = True, # 设置为频率直方图
cumulative = True, # 积累直方图
color = 'steelblue', # 指定填充色
edgecolor = 'w', # 指定直方图的边界色
label = '直方图')# 为直方图呈现标签
# 设置坐标轴标签和标题
plt.title('累计频率直方图')
plt.xlabel('x轴')
plt.ylabel('累计频率')
# 显示图例
plt.legend(loc = 'best')
# 显示图形
plt.show()
四、密度图(频率图):密度图经常跟直方图一起使用,而在matplotlib中没有单独绘制密度图的函数,笔者目前知道两种绘制密度图的方法:
1)通过pandas(数据分析与统计模块),将数据转换成series或dataframe,然后绘图:
import pandas as pd
x = np.random.randn(1000)
data = pd.Series(x) # 将数据由数组转换成series形式
plt.hist(data,density = True,edgecolor ='w',label = '直方图')
data.plot(kind = 'kde',label = '密度图')
# 显示图例
plt.legend()
# 显示图形
plt.show()
2)通过seaborn(matplotlib的高级接口模块)的kdeplot函数绘制密度图:
import seaborn as sns
x = np.random.randn(1000)
plt.hist(data,density = True,edgecolor ='w',label = '直方图')
sns.kdeplot(x,label = '密度图')
# 显示图例
plt.legend()
# 显示图形
plt.show()