matplotlib可视化之直方图plt.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:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
    • 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()

  • 67
    点赞
  • 417
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小文大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值