一、matplotlib
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。
通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
(一)绘制条形图
1.范例代码
#! /usr/env python3
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import random
plt.rcParams['font.sans-serif']=['simhei'] #用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用于正常显示负号
def tiaoxing():
#创建一张图,8英寸的长,8英寸的高,每英寸80点,像素为:(8*80)×(8*80)
fig = plt.figure(1,figsize=(8,8),dpi=80)
#创建子图1,如:(a,b,c)该子图高为1/a,宽为1/b,区域位置为c。
#区域从第一行开始编号,从左到右开始编号。最上面为第一行。
ax1 = fig.add_subplot(2,2,3)
#设置x轴的总标签,用于说明该轴代表的信息,位于x轴下方
ax1.set_xlabel("xx")
#设置x轴的刻度与刻度对应的标签文字
ax1.set_xticks(np.arange(6)) #将x轴分为6等份。
#用标签文字去标记那六等分,默认为0,1,2,3,4,5
ax1.set_xticklabels(("I am a","I am b","I am c","I am d","I am e","I am f"))
#设置y轴的刻度
ax1.set_yticks([0,1,2])
#下面是各个点的(x,y)
x = np.arange(6) #在x轴上均匀的取6个值,均分x轴为6等份。
y = [0.5,1,1.5,1,2,0.3]
#画条形图,x,y为坐标数组,width为宽度,color为颜色
ax1.bar(x,y,width=0.2,color='green',label='一号')
ax1.bar(x+0.2,y,width=0.2,color='red',label='二号')
#在图上的指定位置添加文字,ha代表水平对齐方式,va代表垂直对齐方式,fontsize为文字大小
ax1.text(0,0.55,y[0],ha='center',va='bottom',fontsize=10)
#可以利用循环在图上的所有条形上添加文字以标明该条代表的具体值
#设置子图的子标题
ax1.set_title("第一子图")
#添加图例以标识各条形的意思,对应的文字为plot()中的label,loc设置图例位置,默认为best刚好不覆盖折线的地方
ax1.legend(loc="upper right")
#loc的参数可为:best、upper right(右上)、lower left(左下)、right、center left、lower center等
#ax1.grid()#设置是否显示网格,默认不显示
#将该图存储在e盘
fig.savefig('e:/draws/1.png')
#显示图像,如果你后面没有其他要执行的代码,那么这图就会闪退。后面利用input()函数让代码暂停。
fig.show() #不想看图片,注释就行了。
2.运行结果
(二)折线图
1.范例代码
#! /usr/env python3
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import random
plt.rcParams['font.sans-serif']=['simhei'] #用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用于正常显示负号
def zhexian():
#创建一张图,20英寸的长,8英寸的高,每英寸80点,像素为:(20*80)×(8*80)
fig = plt.figure(1,figsize=(20,8),dpi=80)
#创建子图1,高为1/1,宽为1/1,区域为1
ax1 = fig.add_subplot(1,1,1)
#设置子图的子标题
ax1.set_title("气温变化")
#设置x轴的说明标签
ax1.set_xlabel("时间")
#生成x轴刻度列表
x1 = [ i for i in range(1,61)]
#生成x轴刻度标签列表
x1_lab1 = ["0:0{}".format(i) for i in range(1,10)]
x1_labels = x1_lab1+["0:{}".format(i) for i in range(10,61)]
#设置x轴的刻度
ax1.set_xticks(x1)
#设置x轴刻度对应的标签文字
ax1.set_xticklabels(x1_labels,rotation=270,fontsize=8)#rotation=270标签文字旋转270°
#设置y轴的刻度
ax1.set_yticks([0,10,20,30,40])
#(x,y)坐标,x的坐标直接使用x1的值。此处画两条折线,有两个y列表。
x = x1
y1 = [random.randint(0,40) for i in range(60)]
y2 = [random.randint(0,40) for i in range(60)]
#绘画第一条折线,linestyle为线的风格,alpha为透明度,linewidth为宽度,color颜色,marker点的风格,markerfacecolor点的颜色
#marker的参数:.点/o圆/+加号等
ax1.plot(x,y1,linestyle='--',marker='*',markerfacecolor='black',alpha=0.5,linewidth=1,color='red',label="1号")
#绘画第二条折线
ax1.plot(x,y2,linestyle='-',alpha=0.5,linewidth=1,color='green',label="2号")
#添加图例以标识各折线的意思,对应的文字为plot()中的label,loc设置图例位置,默认为best刚好不覆盖折线的地方
ax1.legend(loc="upper right")
#loc的参数可为:best、upper right(右上)、lower left(左下)、right、center left、lower center等
#ax1.grid()#设置是否显示网格,默认不显示
ax1.text(x1[0],y1[0]+0.7,y1[0],ha='center',va='bottom',fontsize=10,color='red')
#可以利用循环在图上的所有折线上添加文字以标明该条代表的具体值
#设置图的存储位置
fig.savefig('e:/draws/2.png')
#显示图像,如果你后面没有其他要执行的代码,那么这图就会闪退。后面利用input()函数让主线程阻塞。
fig.show()
zhexian()
a = input()
2.运行结果
(三)饼图
1.说明
pie 函数参数详解,英文原版请参见:https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.pie.html?highlight=pie#matplotlib.axes.Axes.pie
pie 函数格式:
def pie(x, explode=None, labels=None, colors=None, autopct=None,
pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None,
radius=None, counterclock=True, wedgeprops=None, textprops=None,
center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)
x :(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化;
explode :(每一块)离开中心距离;
labels :(每一块)饼图外侧显示的说明文字;
colors:(每一块)的颜色,数组。
autopct :控制饼图内百分比设置,可以使用format字符串或者format function;
'%1.2f':指小数点后保留两位有效数值;
'%1.2f%%':在保留两位的基础上加%号
pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6;
shadow :在饼图下面画一个阴影。默认值:False,即不画阴影;
labeldistance :label标签的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;
startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;
radius :控制饼图半径,默认值为1;
counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。
wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。
textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。
center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。
frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。
rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。
hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。
但是目前不推荐去动hold这个属性,这种做法(会有警告)。因此使用默认设置即可。
2.实例代码
import matplotlib.pyplot as plt
import numpy as np
import random
plt.rcParams['font.sans-serif']=['simhei'] #用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用于正常显示负号
def bing():
#创建一张图,20英寸的长,8英寸的高,每英寸80点,像素为:(20*80)×(8*80)
fig = plt.figure(1,figsize=(20,8),dpi=80)
#创建子图1,高为1/1,宽为1/1,区域为1
#区域从第一行开始编号,从左到右开始编号。最上面为第一行。
ax1 = fig.add_subplot(1,1,1)
#设置子图的子标题
ax1.set_title("字母比例图")
#每块大小的list,每块占x/list总大小
sizes = [1,1,1.5,2,0.5]
#每块离开中心的距离
explodes = [0,0,0.1,0,0.1]
#每块的标签
labels = ['A','B','C','D','E']
#画饼图,autopct控制饼图百分比显示,%1.2f%%保留两位且显示%号,textprops设置标签的字体大小与颜色等
ax1.pie(sizes,explodes,labels = labels,autopct='%1.2f%%',textprops={'fontsize':20,'color':'red'})
#添加图例,loc为位置设置upper right右上角,bbox_to_anchor外边距[上边 右边],ncol分列数,borderaxespad = 0.3图例的内边距
ax1.legend(loc="upper right",fontsize=10,bbox_to_anchor=(1.1,1.05),borderaxespad=0.3,ncol=2)
#设置图的存储位置
fig.savefig('e:/draws/3.png')
#显示图像,如果你后面没有其他要执行的代码,那么这图就会闪退。后面利用input()函数让主线程阻塞。
fig.show()
bing()
a = input()
3.运行结果