一.准备工作:
0.通过pip模组在命令行中下载
matplotlib,pandas,scipy等组件库
1.针对matplotlib库无法显示中文的问题
引用如下代码:
#-*- coding: utf-8 -*-
#python3默认utf-8解码
from pylab import
mpl.rcParams['font.sans-serif'] = ['SimHei'] #黑体
mpl.rcParams['axes.unicode_minus'] = False #针对负号显示异常的问题
2.一些基本函数
1>.plot()
plt.plot(x, y, format_string, **kwargs)
#架构函数
#x(y):分别为x轴和y轴数据,可为元组或列表
#format_string&&**kwargs:前者为控制曲线格式的字符串,后者代表其他的格式,
eg:颜色,实、虚线,线宽、风格等
2.>.x(y)label
plt.x(y)label(x(y),fontproperties,fontsize,fontcolor)
#对x、y轴添加文本标签,同时对字体进行设置
eg:plt.xlabel(amount, fontproperties = ‘SimHei’, fontsize = 15, color = ‘green’)
3.>.title
plt.title()
#对图形整体添加文本标签
4.>.annotate
plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dyi
#在图形中添加带箭头的注释
#s表示要注解的字符串是什么,xy对应箭头所在的位置,xytext对应文本所在位置,arrowprops定义显示的属性
5.>.grid
plt.grid(b, which, axis, color, linestyle, linewidth, **kwargs)
#b是布尔值,表示是否显示网格线
#axis取值为‘both’,‘x',’y'
#color为网格线颜色,linestyle为网格线风格,linewidth为网格线宽度
6.>.x(y)tick
以xticks为例
plt.xticks(locs, [labels], **kwargs)
# locs参数为数组参数(array_like, optional),表示x-axis的刻度线显示标注的地方
7.>.figure
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
#num:图像编号或名称,数字为编号 ,字符串为名称
#figsize:指定figure的宽和高,单位为英寸
#dpi参数指定绘图对象的分辨率
eg:fig=plt.figure(figsize=(4,3),facecolor='blue')
8.>.legend
plt.legend(handles,label,loc)
#handles需要传入你所画线条的实例
#label是图例的名称
#loc代表了图例在整个坐标轴平面中的位置(一般选取'best'这个参数值)
二、图形绘制
0.折线图
- 以某市温度变化为例
#主要代码:
import matplotlib.pyplot as plt
plt.figure(figsize=(20, 10), dpi=80)
day=['7.1','7.2','7.3','7.4','7.5','7.6','7.7']
ndegrees=[20,17,18,20,16,18,20]
mdegrees=[35,32,31,30,27,32,30]
line1,=plt.plot(day, mdegrees, c='red')
plt.scatter(day, mdegrees, c='red')
line2,=plt.plot(day, ndegrees, c='blue')
plt.scatter(day, ndegrees, c='blue')
plt.yticks=(range(10, 40, 4))
#利用range函数确定刻度分度值
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlabel("日期", fontdict={'size': 16})
plt.ylabel("温度", fontdict={'size': 16})
#添加文本标签
plt.title("2021年7月份第一周某市气温变化", fontdict={'size': 20})
plt.legend(handles=[line1,line2],labels=['最高温度','最低温度'],loc='best')
#自定义图例
plt.show()
!注:
0.plt.scatter(x, y)函数 可以绘制散点图,在折线图中使用可以更清晰的看到每个点的情况,方便比较
1.plt.lengend函数中loc参数表:
0: ‘best' 1: ‘upper right' 2: ‘upper left' 3: ‘lower left' 4: ‘lower right' 5: ‘right' 6: ‘center left' 7: ‘center right' 8: ‘lower center' 9: ‘upper center' 10: ‘center'
#样例测试结果:
1.直方图
#实现函数:
hist( x, bins=None, range=None, normed=False, # 重要
orientation='vertical', color=None, edgecolor=None, label=None, # 常用
density=False, weights=None, cumulative=False, bottom=None, histtype='bar',
align='mid', rwidth=None, # 选用
1.>x:元组,用来存放数据
2.>bins:整数,序列或者字符串,整数表示条形个数,序列表示区间范围
3.>range:元组,指定最大最小值
4.>density:布尔值,如果为True,则返回归一化概率密度
5.>rwidth:设置条形图的宽度
6.>color:直方图填充色
7.>label:设置直方图标签
8.>orientation:设置直方图方向
- 以生成一个随机的连续数据为例
#主要代码:
import numpy as np
#引入numpy库进行数学处理
import matplotlib.pyplot as plt
x = np.random.randint(1,500,2000)
#产生2000个1~500的随机数
bins=[0,50,100,150,200,250,300,350,400,450,500]
plt.hist(x,color='r',rwidth=0.6)
#hist()函数自定义构造直方图
plt.xticks(bins)
#自定义横轴
plt.xlabel('区间')
plt.ylabel('频数')
plt.title('频数直方图')
plt.show()
#样例测试结果:
2.饼图
#实现函数:
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)
1.>x:每块占图形的比例
2.>labels:每块饼图的外显文字注释
3.>explode:每块离开中心位置的距离
4.>startangle:绘制起始角度,默认为x轴正方向,逆时针绘图
5.>shadow:在饼图下方添加阴影
6.>labeldistance:label相对于饼图的位置,默认值为1.1
7.>radius:饼图半径,默认为1
8.>autopct:控制饼图百分比设置,可用format函数
9.>pctdistance:autopct相对于饼图的位置,默认为0.64
- 以某大学大一学生生活费品均值为例
#主要代码:
import matplotlib.pyplot as plt
costs=[0.1,0.2,0.36,0.23,0.04,0.07]
Range=['低于500','500~1000','1000~1500','1500~2000','2000~2500','高于2500']
Explode=[0,0,0.1,0,0,0]
#突出显示生活费位于1000-1500的学生占比
plt.pie(x=costs,explode=Explode,labels=Range,
autopct='%.1f%%',#设置百分数格式
shadow=True,#添加阴影
radius=1.4)
plt.axis('equal')
#饼图形状为一个正圆
plt.title('大一学生每月生活费情况统计')
plt.legend(title='支出分布')
#设置图例
plt.show()
#样例测试结果:
3.箱型图
#什么是箱型图:
#实现函数:
boxplot(x, norch=None, showfliers=None, patch_artist=None, labels)
1.>x: 绘制所需数据
2.>norch: 是否用凹口形式展现箱型图
3.>showfliers: 是否显示异常值
4.>patch_artist: 是否填充箱体的颜色
5.>labels: 添加标签
- 实例
#主要代码:
import numpy
import matplotlib.pyplot as plt
y1 = np.random.randn(100)
y2= np.random.random(100)
y3 = np.random.randint(1,5,100)
#random函数生成随机数
plt.boxplot((y1,y2,y3),labels=['a','b','c'])
plt.title('箱型图')
plt.show()
#样例测试结果:
4.雷达图
#构造方法:
1.>作一个极坐标系并添加数据点
plt.polar(theta, r, **kwargs)
#theta:极角, r: 极径
#用列表存放数据
plt.ylim()
#设置极轴上下限
eg: plt.polar(0.25*np.pi,20,'ro',lw=2)
#r表示红色,o是圆点 lw宽度为2
2.>连线并使其封闭
#将polar函数中’ro‘改为’ro-‘
#concatenate()函数使其封闭
3.>填色
fill(*args, data=None, **kwargs)
#*args:确定填色区域
#data: 数据对象,可添加标签
- 实例
#测试样例结果:
三、问题补充
#添加标注
1.>无指向性标注
plt.text(x, y, s, fontdict = None, **kwargs) #x, y 为标注文本在绘图区域中的位置; #s为标注文本的内容; #fontdict 为文本属性的字典,默认为文本属性
2.>指向性标注
plt.annotate(s, xy, *args, **kwargs) #s 为标注文本的内容; #xy 为标注箭头的开始坐标 (x, y); #*args 为 xytext = (x, y) 标注文本的坐标;
- 以两地气温变化趋势为例
#测试样例结果