07.all_hist - wwj-2017-1117/graph GitHub Wiki

""" 区分直方图与条形图:

条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的; 直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。 由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。 条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据

""" import matplotlib.pyplot as plt import numpy as np

概率分布直方图

高斯分布

均值为0

mean = 0

标准差为1,反应数据集中还是分散的值

sigma = 1 x = mean + sigma * np.random.randn(10000) fig, (ax0, ax1) = plt.subplots(nrows=2, figsize=(9, 6))

bins是直方图的个数,bins值越大则越窄越密

pdf概率分布图,一万个数落在某个区间内的数有多少个

ax0.hist(x, 40, normed=1, histtype='bar', facecolor='yellowgreen', alpha=0.75)

ax0.set_title('pdf')

cdf累计概率函数,cumulative累计。比如需要统计小于5的数的概率

ax1.hist(x, 20, normed=1, histtype='bar', facecolor='pink', alpha=0.75, cumulative=True, rwidth=0.8) ax1.set_title("cdf") fig.subplots_adjust(hspace=0.4) plt.show() """ 需要进一步理解 https://www.cnblogs.com/woaixuexi9999/p/9238098.http

"""

import numpy as np import matplotlib.pyplot as plt

data = np.random.randn(1000) ret = plt.hist(data) print(ret) plt.show() """ 结合频次直方图中的透明度这个参数,我们再来多做做文章,比如,我们想对不同均值、方差分布特征的正态分布随机变量进行对比,那该怎么做? 显然我们想到的是把不同的几个正态分布图画在一张图里进行比较。 """ import numpy as np import matplotlib.pyplot as plt

data1 = np.random.normal(0, 0.8, 1000) data2 = np.random.normal(-2, 1, 1000) data3 = np.random.normal(3, 2, 1000) plt.grid(True) kwargs = dict(histtype='stepfilled', alpha=0.5, normed=True, bins=40) plt.hist(data1, **kwargs) plt.hist(data2, **kwargs) plt.hist(data3, **kwargs) plt.show() """ 画直方图(hist) plt.text()可以在图中的任意位置添加文字,并支持LaTex语法 xlable(), ylable()用于添加x轴和y轴标签 title()用于添加图的题目

我们绘制一个10000个数据的分布条状图,共50份,以统计10000分的分布情况.

normed :normed=True是频率图,默认是频数图 range :筛选数据范围,默认是最小到最大的取值范围 histtype:hist柱子类型 orientation:水平或垂直方向 rwidth= :柱子与柱子之间的距离,默认是0

""" import numpy as np import matplotlib.pyplot as plt

构造输入数据x

mu, sigma = 100, 15 x = mu + sigma * np.random.randn(10000)

数据的直方图 , bins:这个参数指定bin(箱子)的个数,也就是总共有几条条状图

n, bins, patches = plt.hist(x, bins=50, normed=True, facecolor='g', alpha=0.75, rwidth=0.8)

添加x轴和y轴

plt.xlabel('Smarts') plt.ylabel('Probability')

添加标题

plt.title('Histogram of IQ')

添加文字

plt.text(60, .025, r'$\mu=100,\ \sigma=15$')

plt.axis([40, 160, 0, 0.03])

是否显示方格

plt.grid(True) plt.show()

画直形图(2)

import numpy as np import matplotlib.pyplot as plt

mu = 1000 sigma = 10 x = mu + sigma * np.random.randn(2000) plt.hist(x,bins=10,color='red',normed=True)

添加一个边框

plt.hist(x, bins=10, color='red', normed=True, edgecolor='k') plt.show()

这是什么图

import matplotlib.pyplot as plt

x = np.random.randn(1000) + 2 y = np.random.randn(1000) + 3 plt.hist2d(x, y, bins=40) plt.show() """ 综合画一个图: 考虑在一个子图中画出二元正态分布的联合分布图,而在另两个子图中分别画出x轴和y轴方向上的边缘分布图。

"""

import numpy as np import matplotlib.pyplot as plt

mean = [0, 0] cov = [1, 1], 1, 4 x, y = np.random.multivariate_normal(mean, cov, 3000).T

figsize:指定figure的宽和高,单位为英寸,(1英寸等于2.54厘米);

plt.figure(figsize=(6, 6)) grid = plt.GridSpec(4, 4, wspace=0.5, hspace=0.5)

main_ax = plt.subplot(grid[0:3, 1:4]) plt.plot(x, y, 'ok', markersize=3, alpha=0.2) plt.title("figure-1")

y_hist = plt.subplot(grid[0:3, 0], xticklabels=[], sharey=main_ax) # 和大子图共y轴 plt.hist(y, 60, orientation='horizontal', color='gray') # 图形水平绘制 y_hist.invert_xaxis() # x轴调换方向 plt.title("figure-2")

x_hist = plt.subplot(grid[3, 1:4], yticklabels=[], sharex=main_ax) # 和大子图共x轴 plt.hist(x, 60, orientation='vertical', color='gray') # 图形垂直绘制 x_hist.invert_yaxis() # y轴调换方向 plt.title("figure-3")

plt.show()