matplotlib之hist

一、hist函数

matplotlib.pyplot.hist(
    x, bins=None, range=None, 
    density=None, weights=None, cumulative=False, 
    bottom=None, histtype='bar', align='mid', 
    orientation='vertical', rwidth=None, log=False, 
    color=None, label=None, stacked=False, normed=None, 
    hold=None, data=None, **kwargs)

二、参数

x : (n,) n维数组或者n维数组序列,多维数组长度不要求一致

bins : 整数,序列,或者 ‘auto’, 可选

如果是整数,按bins + 1个组计算

如果是序列实例:[1, 2, 3, 4]

第一个bin [1, 2) 第二个bin [2, 3) 第三个bin [3, 4]

如果auto:rcParam hist.bins

range : 元组,可选bins的边界,如果bins是一个序列则无效如果没有则是(x.min(), x.max())

density : boolean, 可以,如果为真返回第一个值是每个区间的百分比,默认是个数

weights : n维数组(n, ),可选,和数据x一致,每一个数据的权重

cumulative : boolean, 计算每一个集合的累加值

bottom : 标量数组,距离底边的高度

histtype : {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}, 默认"bar",

align : {‘left’, ‘mid’, ‘right’}, 可选,对齐方式,默认"mid"

orientation : {‘horizontal’, ‘vertical’}, 可选,bar方向

rwidth : 标量,bar的宽度,可选

log : boolean, 可选,y坐标是否使用科学计数法

color : color或者color数组,设置bar颜色,color数组不是设置每一个bar的颜色

label : string,图例标签

stacked : boolean, 可选是否垂直重叠,默认水平重叠

normed : bool, 不被推荐,使用density代替

三、返回值

n : 数组或数组列表每一个bar区间的数量或者百分比

bins : 数组,bar的范围和bins参数含义一样

patches : 列表 或者列表的列表 图形对象

四、实例

各个参数对比

#-*-coding:utf-8-*-
import numpy as np  
import matplotlib
import matplotlib.mlab as mlab  
import matplotlib.pyplot as plt
import random

bottom = [1, 1, 2, 3]
data = []
random.seed(123456)
for x in range(20):
    data.append(random.randint(1,5))
# print data

np.random.seed(20180408)
weight = np.random.rand(20)

ax = plt.subplot(331)
plt.hist(data,bins=4,histtype='bar',rwidth=0.8)
ax.set_title("bins=4,histtype='bar',rwidth=0.8")


ax = plt.subplot(332)
plt.hist(data,bins=5,rwidth=0.1)
ax.set_title("bins=5,rwidth=0.1")


ax = plt.subplot(333)
ax.set_title("bins=5,rwidth=0.3,density=True")
# plt.xlabel(u'数量',fontsize=8)
plt.ylabel(u'占比',fontsize=8)
n,edgeBin,patches = plt.hist(data,bins=5,rwidth=0.3,density=True)
# n,edgeBin,patches = plt.hist(data,bins=5,histtype='bar',rwidth=0.8)
print n
print edgeBin

ax = plt.subplot(334)
ax.set_title("bins=5,rwidth=0.3,density=True,weights=weight")
n,edgeBin,patches = plt.hist(data,bins=5,rwidth=0.3,density=True,weights=weight)
# n,edgeBin,patches = plt.hist(data,bins=5,rwidth=0.3,weights=weight)
print n
print edgeBin


ax = plt.subplot(335)
ax.set_title("bins=4,rwidth=0.3,bottom=bottom")
plt.hist(data,bins=4,rwidth=0.3,bottom=bottom)

ax = plt.subplot(336)
ax.set_title("bins=4,rwidth=0.3,histtype='stepfilled'")
# plt.hist(data,bins=4,rwidth=0.8,histtype='barstacked')
# plt.hist(data,bins=4,rwidth=0.8,histtype='step')
plt.hist(data,bins=4,rwidth=0.3,histtype='stepfilled')


colors = "rgmbc"
ax = plt.subplot(337)
ax.set_title("bins=4,rwidth=0.3")
n,edgeBin,patches = plt.hist(data,bins=4,rwidth=0.3)
random.seed()
for patch in patches:
    patch.set_facecolor(random.choice(colors))


label = "Label"
ax = plt.subplot(338)
ax.set_title("bins=4,rwidth=0.3,label=label")
plt.hist(data,bins=4,rwidth=0.3,label=label)
plt.legend(fontsize=12)

ax = plt.subplot(339)
ax.set_title("bins=4,rwidth=0.3,log=True,cumulative=True")
n,edgeBin,patches = plt.hist(data,bins=4,rwidth=0.3,log=True,cumulative=True)
print n
print edgeBin

fig = plt.gcf()
fig.set_size_inches(12, 10)
fig.savefig("hist.png")
plt.show()

hist1

这里说明几个参数,第一个参数x数据集没有什么说的,第二个参数和返回值的bins,我们知道柱状图是有很多矩形组成,我们把这些矩形称为"bar",bins就是描述这些"bar"的区间的。例如:bins=[1,2,3,4]就是把数据集划分为[1,2),[2,3),[3,4]这3个区间,每一个区间表示的是数据集中落入这个区间的值的个数。如果设置了density=True,每一个区间表示的就是数据集落入这个区间值个数的百分比。如果设置了cumulative =True就每一个区间表示的是数据集落入这个区间的值的总和。

weights参数是设置的每一个值的权重,无论是算个数,还是算百分比,还是算总和,weights都会参与计算。

多数据集对比

#-*-coding:utf-8-*-
import numpy as np  
import matplotlib
import matplotlib.mlab as mlab  
import matplotlib.pyplot as plt


# np.random.seed(20180410)
# data = np.random.randint(1,6,size=(20,2))
data = [[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5],[5,4,4,3,3,3,2,2,2,2,1,1,1,1,1]]

color = ["m","c"]
ax = plt.subplot(221)
ax.set_title("bins=4,rwidth=0.3,color=color")
ns,edgeBin,patches = plt.hist(data,bins=4,rwidth=0.3,color=color)

for n in ns:
    print n

print edgeBin


ax = plt.subplot(222)
plt.hist(data,bins=4,rwidth=0.3,stacked=True)
ax.set_title("bins=4,rwidth=0.3,stacked=True")

ax = plt.subplot(223)
plt.hist(data,bins=4,rwidth=0.3,stacked=True,align="right")
ax.set_title("bins=4,rwidth=0.3,stacked=True,align=right")

ax = plt.subplot(224)
plt.hist(data,bins=4,rwidth=0.3,orientation="horizontal")
ax.set_title("bins=4,rwidth=0.3,orientation=horizontal")


fig = plt.gcf()
fig.set_size_inches(12, 8)
fig.savefig("hist2.png")
plt.show()

hist2

这里我们也可以看出来color数组是针对多数据集的。

cumulative和density对比

#-*-coding:utf-8-*-
import numpy as np  
import matplotlib
import matplotlib.mlab as mlab  
import matplotlib.pyplot as plt


data = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]
data2 = [[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5],[5,4,4,3,3,3,2,2,2,2,1,1,1,1,1]]

ax = plt.subplot(321)
ax.set_title("bins=4,rwidth=0.3,cumulative=True")
ns,edgeBin,patches = plt.hist(data,bins=4,rwidth=0.3,cumulative=True)

for n in ns:
    print n

print edgeBin

print "---------------------------"


ax = plt.subplot(322)
ax.set_title("bins=4,rwidth=0.3")
ns,edgeBin,patches = plt.hist(data,bins=4,rwidth=0.3)

for n in ns:
    print n

print edgeBin

print "---------------------------"


ax = plt.subplot(323)
ax.set_title("bins=4,rwidth=0.3,density=True,cumulative=True")
ns,edgeBin,patches = plt.hist(data,bins=4,rwidth=0.3,cumulative=True,density=True)

for n in ns:
    print n

print edgeBin

print "---------------------------"


ax = plt.subplot(324)
ax.set_title("bins=4,rwidth=0.3,density=True")
ns,edgeBin,patches = plt.hist(data,bins=4,rwidth=0.3,density=True)

for n in ns:
    print n

print edgeBin

print "---------------------------"

ax = plt.subplot(325)
ax.set_title("bins=4,rwidth=0.3,cumulative=True")
ns,edgeBin,patches = plt.hist(data2,bins=4,rwidth=0.3,cumulative=True)

for n in ns:
    print n

print edgeBin
print "---------------------------"

ax = plt.subplot(326)
ax.set_title("bins=4,rwidth=0.3")
ns,edgeBin,patches = plt.hist(data2,bins=4,rwidth=0.3)

for n in ns:
    print n

print edgeBin
fig = plt.gcf()
fig.set_size_inches(12, 10)
fig.savefig("hist3.png")
plt.show()

hist3

上面的主要是看输出,从上面我们可以看出density对cumulative的影响。

五、参考

matplotlib.axes.Axes.hist

matplotlib.pyplot.hist

转载于:https://my.oschina.net/u/2474629/blog/1793008

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值