直方图与条形图的区别
(1)条形图(柱状图)用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。
(2)直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。当宽度一样时,一般就用长条形长度表示频数。
(3)条形图(柱状图)主要用于展示离散型数据分布特征,而直方图则主要用于展示连续性数据分布特征。直观上,直方图各个长条形是衔接在一起的,连续排列,表示数据间的数学关系;条形图(柱状图)各长条形之间留有空隙,分开排列,区分不同的类。
区别 | 频数分布直方图 | 条形图(柱状图) |
---|---|---|
横轴上的数据 | 连续的,是一个范围 | 孤立的,代表一个类别 |
长条形之间 | 没有空隙 | 有空隙 |
频数的表示 | 一般用长条形面积表示;当宽度相同时,用长度表示 | 长条形的长度 |
函数
plt.hist(x,bins=None,range=None, density=None, bottom=None, histtype=‘bar’, align=‘mid’, log=False, color=None, label=None, stacked=False, normed=None)
关键参数
返回值
示例1:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.rcParams[‘font.sans-serif’]=[‘SimHei’] # 用黑体显示中文
matplotlib.rcParams[‘axes.unicode_minus’]=False # 正常显示负号
data = np.random.randn(10000)
#density=False:频数,density=True:频率
plt.hist(data, bins=40, density=True, facecolor=“blue”, edgecolor=“black”, alpha=0.7)
plt.xlabel(“区间”)
plt.ylabel(“频数/频率”)
plt.title(“频数/频率分布直方图”)
plt.show()
示例2:
连接直方图的中心
import matplotlib.pyplot as plt
import numpy as np
x=np.random.randint(0,100,100)#生成【0-100】之间的100个数据,即 数据集
bins=np.arange(0,101,10)#设置连续的边界值,即直方图的分布区间[0,10],[10,20]…
width=10#柱状图的宽度
#直方图会进行统计各个区间的数值
frequency_each,,= plt.hist(x,bins,color=‘deepskyblue’,width=width,alpha=0.7)#alpha设置透明度,0为完全透明
plt.xlabel(‘scores’)
plt.ylabel(‘count’)
plt.xlim(0,100)#设置x轴分布范围
plt.plot(bins[1:]-(width//2),frequency_each,color=‘palevioletred’)#利用返回值来绘制区间中点连线
plt.show()
示例3:
import numpy as np
import matplotlib.pyplot as plt
#概率分布直方图
#高斯分布
#均值为0
mean = 0
#标准差为1,反应数据集中还是分散的值
sigma = 1
x=mean+sigma*np.random.randn(10000)
fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6))
#第二个参数是柱子宽一些还是窄一些,越大越窄越密
ax0.hist(x,40,histtype='bar',facecolor='yellowgreen',alpha=0.75)
##pdf概率分布图,一万个数落在某个区间内的数有多少个
ax0.set_title('pdf')
ax1.hist(x,20,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8)
#cdf累计概率函数,cumulative累计。比如需要统计小于5的数的概率
ax1.set_title("cdf")
fig.subplots_adjust(hspace=0.4)
plt.show()
示例4:
import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt
sampleNo = 1000;
mu = 3
sigma = 0.1
np.random.seed(0)
s = np.random.normal(mu, sigma, sampleNo )
#s = np.random.rand(1, sampleNo )
plt.subplot(141)
plt.hist(s, 10, density=True) #####bins=10
np.random.seed(0)
s = sigma * np.random.randn(sampleNo ) + mu
plt.subplot(142)
plt.hist(s, 30, density=True) #####bins=30
np.random.seed(0)
s = sigma * np.random.standard_normal(sampleNo ) + mu
plt.subplot(143)
plt.hist(s, 30, density=True) #####bins=30
mu = np.array([[1, 5]])
Sigma = np.array([[1, 0.5], [1.5, 3]])
R = cholesky(Sigma)
s = np.dot(np.random.randn(sampleNo, 2), R) + mu
plt.subplot(144)
plt.plot(s[:,0],s[:,1],’+’)
plt.show()
函数
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, align=‘center’, data=None, kwargs*)
生成竖直的条形图
matplotlib.pyplot.barh()生成水平方向的条形图
重要参数
返回值
bars:matplotlib.container.BarContainer。
带有所有bar与errorbar的容器。
示例1:
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
X = [0, 1, 2, 3, 4, 5]
Y = [222, 42, 455, 664, 454, 334]
fig = plt.figure()
#plt.bar为我们创建条形图
plt.bar([0,3,5,7,9],[5,2,7,8,2], label=“Example one”,color=‘r’) #红色
plt.bar([2,4,6,8,10],[8,6,2,5,6], label=“Example two”, color=‘g’) #绿色
plt.legend()
plt.xlabel(‘bar number’)
plt.ylabel(‘bar height’)
plt.title(‘Epic Graph\nAnother Line! Whoa’)
plt.show()
堆叠图用于显示『部分对整体』随时间的关系。 堆叠图基本上类似于饼图,只是随时间而变化。
函数
plt.stackplot(x,* args,** kwargs )
重要参数
stackplot(x, y) # where y is MxN(2d array of dimension MxN)
stackplot(x, y1, y2, y3, y4) # where y1, y2, y3, y4, are all 1xNm
stackplot(x, y1, y2, y3, y4, labels=[], colors=[])
示例1:
考虑一个情况,一天有24小时,看看我们如何花费时间。 将我们的活动分为:睡觉,吃饭,工作和玩耍。假设我们要在5天的时间内跟踪它:
import matplotlib.pyplot as plt
days = [1,2,3,4,5]
sleeping = [7,8,6,11,7]
eating = [2,3,4,3,2]
working = [7,8,7,2,2]
playing = [8,5,7,8,13]
plt.plot([],[],color=‘m’, label=‘Sleeping’, linewidth=5)
plt.plot([],[],color=‘c’, label=‘Eating’, linewidth=5)
plt.plot([],[],color=‘r’, label=‘Working’, linewidth=5)
plt.plot([],[],color=‘k’, label=‘Playing’, linewidth=5)
plt.stackplot(days, sleeping,eating,working,playing, colors=[‘m’,‘c’,‘r’,‘k’])
plt.xlabel(‘x’)
plt.ylabel(‘y’)
plt.title(‘Interesting Graph\nCheck it out’)
plt.legend()
plt.show()
函数
pie(x, explode=None, labels=None……)
重要参数
注意
(1)pie函数默认绘制形状为椭圆形,需自行设置坐标轴模式(plt.axis(‘equal’))来显示为圆形;
(2)pie()绘制顺序默认从x正半轴开始逆时针方向,当x向量所有元素之和小于1时,画图会正常进行,但饼图会有缺口;
示例1
import matplotlib.pyplot as plt
slices = [7,2,2,13]
activities = ['sleeping','eating','working','playing']
cols = ['c','m','r','b']
plt.pie(slices,
labels=activities,
colors=cols,
startangle=90,
shadow= True,
explode=(0,0.1,0,0),
autopct=’%1.1f%%’)
#0.1表示将eating那一块凸显出来
plt.title(‘Interesting Graph\nCheck it out’)
plt.show()
(1)可以选择指定图形的『起始角度』,在例1中,startangle=90 表示为饼图选择了90度角,这意味着第一个部分是一个竖直线条。
(2)explode表示(每一块)离开中心距离,如果不想拉出任何切片,传入0,0,0,0。explode=(0,0.1,0,0)表示第二块离开中心0.1。
(3)autopct,选择将百分比放置到图表上面,这里使用format字符串,’%1.1f%%'表示小数点后一位。
示例2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#将图表内容字体设置为黑体,可以正常显示中文
ratios=[0.1,0.1,0.15,0.15,0.4]#存放比例列表
colors=[‘peru’,‘coral’,‘salmon’,‘yellow’,‘grey’]#存放颜色列表,与比例相匹配
labels=[“流行”,‘classic’,‘pop’,‘纯音乐’,‘blue’]#存放各类元素标签
explode=(0,0.1,0,0,0.08)
plt.pie(ratios,explode=explode,colors=colors,labels=labels)#绘制饼图
plt.title(‘歌单音乐种类百分比’)
plt.axis(‘equal’)#将饼图显示为正圆形
plt.show()
原链接:https://blog.csdn.net/yyl424525/article/details/92721739