Python 第三方模块 绘图 Matplotlib模块 绘图2(直方图,饼图,等值线图)

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

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值