1.绘制直方图:
numpy.histogram_bin_edges支持的策略参见:
https://numpy.org/doc/stable/reference/generated/numpy.histogram_bin_edges.html#numpy.histogram_bin_edges
matplotlib.pyplot.hist(<x>[,bins=None,range=None,density=False,bottom=0,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,stacked=False,**kwargs])
#参数说明:None表示默认值由全局配置决定
x:指定数据集;为数组/数组列表
bins:指定bin的数量/各个bin的范围;可为int/list/str
默认值为rcParams["hist.bins"]=10
#所有区间均为左闭右开
如果为int,指定的是bin的数量,且各个bin的宽度都相同
如果为list,指定的是各个bin的区间截止点,如bins=[1,2,3,4]表示区间依次为[1,2),[2,3),[3,4]
如果为str,则应是numpy.histogram_bin_edges支持的策略
range:指定各个bin的范围;为tuple
#只在没有指定bins的情况下生效
density:指定y轴刻度是否表示频率;为bool;默认为False(y轴刻度表示频度)
*此处:频率=区间内数据数据/(数据总数*区间宽度),即单位长度上的平均频率
bottom:指定y坐标的起始位置(y轴基线);默认为0
histtype:指定矩形的样式;为str;可选值见下:
"bar":默认值,传统的条形直方图,如果有多个数据集,则各数据集在各bin中并排排列
"barstacked":当数据集为1个,和"bar"相同;当数据集为多个,则将数据集垂直堆叠
"step":未填充的线条形式
"stepfilled":填充的线条形式,效果与"bar"类似
align:指定区间截断点位于条段的什么位置;可为"left"/"mid"(默认值)/"right"
orientation:指定条段的方向;可为"vertical"(默认值)/"horizontal"
rwidth:指定条段的相对宽度;如果不指定,则自动计算得到
log:指定y轴是否以指数显示刻度;为bool;默认为False
color:指定条段的颜色;默认为"blue"
#功能与facecolor相同,指定1个即可;如果两者都指定,则取facecolor的值
label:指定图例的文字说明
stacked:指定是否为堆积状图;为bool;默认为False
#当两个数据集相似时,堆积在一起会把第1个数据的显示相对缩小
kwargs:指定其他属性(见下图)
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> x=np.random.randint(0,101,100)
>>> bins=np.arange(0,101,10)#分布区间[0,10),[10,20),...,[90,100]
>>> plt.hist(x,bins=bins,linewidth=0.5,edgecolor='k')#边缘线宽0.5,颜色为黑色
(array([12., 9., 10., 6., 6., 4., 10., 16., 12., 15.]), array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]), <a list of 10 Patch objects>)
>>> plt.xlim(0,100)#x 轴刻度范围
(0.0, 100.0)
>>> plt.title('简单直方图示例')
Text(0.5, 1.0, '简单直方图示例')
>>> plt.xlabel('x axis label')
Text(0.5, 0, 'x axis label')
>>> plt.ylabel('y axis label')
Text(0, 0.5, 'y axis label')
>>> plt.show()#结果见下图
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> hist1=np.random.randint(0,100,100)
>>> hist2=np.random.randint(0,100,100)
>>> x=[hist1,hist2]
>>> colors=['orchid', 'deepskyblue']
>>> labels=['hist1','hist2']
>>> bins=range(0,101,10)
>>> #绘制有2份数据的直方图,数据集等其他参数可使用list传递,也可以使用两次hist()
... plt.hist(x,bins=bins,color=colors,stacked=True,label=labels)
(array([[ 7., 6., 6., 13., 10., 12., 10., 17., 10., 9.],
[21., 19., 13., 23., 18., 21., 20., 20., 21., 24.]]), array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]), <a list of 2 Lists of Patches objects>)
>>> plt.title('堆积的直方图示例')
Text(0.5, 1.0, '堆积的直方图示例')
>>> plt.xlabel('x axis label')
Text(0.5, 0, 'x axis label')
>>> plt.ylabel('y axis label')
Text(0, 0.5, 'y axis label')
>>> plt.legend(loc="upper left")
<matplotlib.legend.Legend object at 0x000001491437B3C8>
>>> plt.show()#堆积状图,结果见下图1
>>> plt.hist(x,bins=bins,color=colors,label=labels)
(array([[ 7., 6., 6., 13., 10., 12., 10., 17., 10., 9.],
[14., 13., 7., 10., 8., 9., 10., 3., 11., 15.]]), array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]), <a list of 2 Lists of Patches objects>)
>>> plt.show()#非堆积状图,结果见下图2
2.绘制饼图:
wedgeprops可指定的属性参见:
https://matplotlib.org/api/_as_gen/matplotlib.patches.Wedge.html#matplotlib.patches.Wedge
textprops可指定的属性参见:
https://matplotlib.org/api/text_api.html?highlight=text#matplotlib.text.Text
matplotlib.pyplot.pie(
<x>[,explode=None,labels=None,colors=None,
autopct=None,pctdistance=0.6,shadow=False,
labeldistance=1.1,startangle=None,radius=1,
counterclock=True,wedgeprops=None,textprops=None,
center=(0,0),frame=False,rotatelabels=False
])
#参数说明:None表示默认值由全局配置决定或没有
x:指定各扇形块占据的百分比;为数组,数组元素为num(无%)
explode:指定各扇形块脱离饼图的距离;为数组;默认全部为0
#脱离的距离指扇形顶点到圆心的距离
要求:len(explode)=len(x)
labels:指定各扇形块上的文本标签;为str list;默认无
colors:指定各扇形块的颜色;为list
autopct:指定如何显示百分比;为str/function;默认不显示
例:autopct='%1.1f%%'表示float,保留1位小数,并添加%
pctdistance:指定圆心与autopct生成的文本间的距离;为float
shadow:指定是否为扇形添加阴影效果
labeldistance:指定label与圆心的距离;为num
startangle:将饼图按照逆时针旋转指定的角度;为float(可正可负)
起始位置为右偏上36°
radius:指定饼图的半径;为float
counterclock:指定是否按逆时针对扇形图进行排列;为bool
wedgeprops:指定饼图对象的其他属性;为dict
textprops:指定文本对象的其他属性
center:指定圆心的坐标
frame:指定是否显示x/y轴外框
rotatelabels:指定是否按角度调整每个扇形块的label
#实例:
>> import matplotlib.pyplot as plt
>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>> x=[10,30,45,15]
>> labels=['Java','Go','Python','C++']
>> colors=['red','yellow','blue','green']
>> plt.pie(x,labels=labels,colors=colors,labeldistance=1.1,rotatelabels=True)
>> plt.title('饼状图按角度调整 labels 示例')
>> plt.show()#结果见下图
>> import matplotlib.pyplot as plt
>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>> x=[10,30,45,15]
>> labels=['Java','Golang','Python','C++']
>> colors=['red','yellow','blue','green']
>> plt.pie(x,labels=labels,colors=colors,labeldistance=1.1,explode=[0.3,0,0,0])
>> plt.title('饼状图突出显示扇形块示例')
>> plt.legend(bbox_to_anchor=(1, 1))
>> plt.show()#结果见下图
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> x=[10,30,45,15]
>>> labels=['Java','Golang','Python','C++']
>>> colors=['red','yellow','blue','green']
>>> plt.pie(
... x, #每个扇形块所占比例
... labels=labels, #扇形块文本标签
... colors=colors, #扇形块颜色
... labeldistance=1.1, #扇形块标签距圆心的距离
... explode=[0.3, 0, 0, 0], #第1个扇形块突出显示
... autopct='%1.1f%%', #显示百分比,保留1位小数
... pctdistance=0.5 #百分比文本距离圆心的距离
... )
>>> plt.show()#结果见下图
import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> x=[10,30,45,15]
>>> labels=['Java','Golang','Python','C++']
>>> colors=['red','yellow','blue','green']
>>> plt.pie(
... x, #每个扇形块所占比例
... labels=labels, #扇形块文本标签
... colors=colors, #扇形块颜色
... labeldistance=1.1, #扇形块标签距离圆心的距离
... explode=[0.3, 0, 0, 0], #第1个扇形块突出显示
... autopct='%1.1f%%', #显示百分比,保留1位小数
... pctdistance=0.6, #百分比文本距离圆心的距离
... shadow=True, #显示阴影效果
... wedgeprops={ #为每个扇形添加属性
... 'width': 0.7, #扇形宽度0.7
... 'edgecolor': '#98F5FF', #扇形边缘线颜色
... 'linewidth': 3 #扇形边缘线宽度
... },
... textprops={ #为文字添加属性
... 'fontsize': 13, #文字大小
... 'fontweight': 'bold', #文字粗细
... 'color': 'k' #文字颜色,黑色
... }
... )
>>> plt.title('饼状图自定义每个扇形和文字属性示例',fontweight='bold')
>>> plt.legend(bbox_to_anchor=(1,1),borderpad=0.6)
>>> plt.show()#结果见下图
3.绘制等值线图(等高线图)
(1)绘制方法:
[<CS>]=matplotlib.pyplot.contour(<X>,<Y>,<Z>[,<level>,**kwargs])
[<CS>]=matplotlib.pyplot.contourf(<X>,<Y>,<Z>[,<levle>,**kwargs])
#2者的区别在于contourf()会填充等值线间的区域,contour()不会
#注意:如果线条颜色为单色,则高度值<0的等高线默认为虚线
#参数说明:
X,Y,Z:分别指定数据点的x/y/z坐标;均为matrix
levels:指定绘制哪些等高线;可为int/数组;默认为5
如果是int,则使用levels个数据间隔,即绘制levels+1条等高线
#系统自动选择绘制哪些等值线
如果是数组,则绘制那些值等于levels中某元素的等高线
#数组中元素必须按递增顺序排列
CS:返回等值线集对象(ContourSet对象)
kwargs:指定其他参数(见下图)
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x=np.arange(-2.0,2.0,0.01)
>>> y=np.arange(-2.0,2.0,0.01)
>>> m,n=np.meshgrid(x,y)#生成网格点坐标矩阵
#指定函数来计算高度,也可以直接使用2维数组储存高度:
>>> def f(a,b):
... return (1-b**5+a**5)*np.exp(-a**2-b**2)
...
#绘制等高线图,2个数据间隔,3条等高线
>>> plt.contour(m,n,f(m,n),2)
<matplotlib.contour.QuadContourSet object at 0x0000018415A4AAC8>
>>> plt.show()#结果见下图1
#绘制等高线图,8个数据间隔,9条等高线(注意有1条不在数据范围内)
>>> plt.contour(m,n,f(m,n),8,colors='k')
<matplotlib.contour.QuadContourSet object at 0x000002A3CDEC4308>
>>> plt.show()#结果见下图2
>>> plt.contourf(m,n,f(m,n),8)
<matplotlib.contour.QuadContourSet object at 0x0000020650950C88>
>>> plt.show()#结果见下图3
>>> plt.contour(m,n,f(m,n),x)
<matplotlib.contour.QuadContourSet object at 0x00000206535412C8>
>>> plt.show()#结果见下图4
>>> plt.contourf(m,n,f(m,n),x)
<matplotlib.contour.QuadContourSet object at 0x000002064E150748>
>>> plt.show()#结果见下图5
(2)标记等高线图:
CabelText类参见:
https://matplotlib.org/api/contour_api.html#matplotlib.contour.ClabelText
matplotlib.pyplot.clabel(<CS>[,*args,**kwargs]):标记等高线的高度值
#参数说明:
CS:等值线集对象,即.contour()/.contourf()的返回值
args,kwargs:指定其他参数(见下图1)
#实例:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x=np.arange(-2.0,2.0,0.01)
>>> y=np.arange(-2.0,2.0,0.01)
>>> m,n=np.meshgrid(x,y)
>>> def f(a, b):
... return (1-b**5+a**5)*np.exp(-a**2-b**2)
...
#绘制等高线图:8个数据间隔,颜色为黑色
>>> C=plt.contour(m,n,f(m,n),8,colors='k')
#添加标记:标记处不显示轮廓线,颜色为黑红绿蓝四种,保留2位小数
>>> plt.clabel(C,inline=True,colors=['k','r','g','b'],fmt='%1.2f')
>>> plt.show()#结果见下图2