Matplotlib
文章目录
一、如何使用Matplotlib
这里以折线图为例。
1. 导入pyplot
from matplotlib import pyplot as plt
“as plt” 的目的是为了简便,这样可以直接使用plt来引用pyplot库。
2. 输入数据
瞎编一个情境:将一些草履虫放在培养皿中培养,从第2个小时,每隔2小时测一次草履虫的数量,直到第10小时为止。
from matplotlib import pyplot as plt
x = range(2,12,2) # x轴的数据
y = [26,27,22,18,15] # y轴的数据
# x、y中的数据一一对应组成了要绘制的坐标(2,26),(4,27),......
Attention: 这里x、y中数据的数量必须一致,否则会报错。
3.传入数据
plt.plot()
from matplotlib import pyplot as plt
x = range(2,12,2)
y = [26,27,22,18,15]
plt.plot(x,y) #传入x和y,通过plot绘制图像
关于plt.plot()的参数
plt.plot(x,y,ls,lw,label,color)
参数名称 | 参数作用 |
---|---|
x | 传入数据 |
y | 传入数据 |
ls | 线型(linestyle) |
lw | 线宽(linewidth) |
label | 标签文本内容 |
color | 颜色,如:color=‘blue’ |
4.显示图像
仅仅是传入数据,并不会显示图像,而要用plt.show()来显示。
from matplotlib import pyplot as plt
x = range(2,12,2)
y = [26,27,22,18,15]
plt.plot(x,y)
plt.show() #在执行程序的时候展示图像
绘制出的图像如下:
二、一些其他的操作
1. 设置图片大小
fig = plt.figure(figsize=(宽, 高),dpi= )
fig = plt.figure(figsize=(20,8),dpi=80)
- 这样就可以调节图片的宽和高
- 传入dpi参数是为了让图片更清晰
Attention:
设置图片大小这一步:
(1)要放在”导入pyplot“这一步之后,否则会报错:'plt’未被定义。
(2)要放在传入数据之前,否则会得到两个图像,一个是没有改变大小的图像,另一个是改变了大小的图像,但没有数据。
(3)要放在"plt.show()"之前。
2.设置x(y)轴的刻度
plt.xticks()
from matplotlib import pyplot as plt
x = range(2,12,2)
y = [26,27,22,18,15]
plt.plot(x,y)
plt.xticks(x) #以x的值作为x轴的刻度
设置之后x轴就变成这样了:
当然,刻度可以任意调节,关键是要调到合适的刻度。
关于plt.xsticks()的参数
plt.xsticks(ticks, label, color= ,rotation= )
参数名称 | 参数作用 |
---|---|
ticks | (数组)用于设置x轴刻度间隔 |
label | 用于设置每个间隔的显示标签,与ticks一一对应 |
color | 颜色 |
rotation | 标签旋转(逆时针)的角度 |
3.设置中文刻度
测量10点到12点之间每分钟的气温,并设置x轴刻度为10分钟。
import random #随机数
from matplotlib import pyplot as plt
x = range(120)
y = [random.randint(20,35) for i in range(120)]
#生成120个在[20,35]之间的整数
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
time = ["10点{}分".format(i) for i in range(60)]
time += ["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::10],time[::10],rotation=60)
plt.show()
这个程序运行得到的图像,是不会显示中文的:
解决措施:
通过matplotlib.rc来修改。
(1)先查看matplotlib.rc的源码
(2)再复制font那一段,进而修改字体、粗细、大小。
这里有一些字体:
修改后的代码是这样的:(以“仿宋”字体为例)
import random
from matplotlib import pyplot as plt
#这里为修改字体的操作
import matplotlib
font = {'family' : 'FangSong'}
matplotlib.rc("font",**font)
x = range(120)
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
time = ["10点{}分".format(i) for i in range(60)]
time += ["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::10],time[::10],rotation=60)
plt.show()
这个程序执行得到的图像,会显示中文:
4.设置中文注释
这个图像的内容是什么呢?x、y轴分别表示什么呢?
这需要我们在图像上标注出来。
x轴上的注释:plt.xlabel()
y轴上的注释:plt.ylabel()
标题:plt.title()
import random
from matplotlib import pyplot as plt
import matplotlib
font = {'family' : 'FangSong'}
matplotlib.rc("font",**font)
x = range(120)
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
time = ["10点{}分".format(i) for i in range(60)]
time += ["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::10],time[::10],rotation=60)
plt.xlabel("时间")
plt.ylabel("温度 单位(℃)")
plt.title("10点到12点每分钟的气温变化情况")
plt.show()
得到的图像是这样的:
5. 设置图例
plt.lengend()
关于plt.legend()的参数
参数名称 | 参数作用 |
---|---|
loc | 设置图例位置 |
frameon | frameon=False(去掉边框) |
edgecolor | 设置图例边框颜色 |
facecolor | 设置图例背景颜色,若无边框则此参数无效 |
title | 设置图例标题 |
三、绘制不同的图像
1. 散点图
和折线图差不多,大概就是函数不一样。
plt. scatter(x, y, c, marker)
Attention: x、y两个序列的长度必须相同
关于plt.scatter()的参数
参数名称 | 参数作用 |
---|---|
c | 表示色彩或颜色序列,默认为蓝色’b’ |
marker | 表示标记的样式,默认为’o’ |
2.条形图
和折线图、散点图差不多,大概就是函数不一样。
plt.bar()
ps: 如果要绘制横着的条形统计图,要用函数plt.barh()
Attention: 这两个函数的参数有所区别,如width、height…实在不想写了。
遇事不决,Ctrl加左键。给我查源码去!
多次条形统计图
from matplotlib import pyplot as plt
a = range(1,5)
b1 = [15,21,24,16]
b2 = [12,15,20,16]
b3 = [23,18,23,30]
#这里定义两个变量,后边控制统计图的距离、统计图的宽度会用到
bar_width1 = 0.2
bar_width2 = 0.2
#设置x轴上相邻两条不同统计图的距离
x1 = list(a)
x2 = [i+bar_width1 for i in x1] #x2的第n项为x1的第n项加0.2
x3 = [i+bar_width1*2 for i in x1] #x3的第n项为x1的第n项加0.2*2
#设置每条统计图的宽度
plt.bar(x1,b1,width=bar_width2)
plt.bar(x2,b2,width=bar_width2)
plt.bar(x3,b3,width=bar_width2)
plt.show()
得到的图像:
这个程序中 bar_width1 和 bar_width2 相等,所以得到的不同条形中间没有间隔。
3.直方图
plt.hist(x, bins)
关于plt.hist()的参数
参数名称 | 参数作用 |
---|---|
x | 存放数据 |
bins | 表示组数 |
import random
from matplotlib import pyplot as plt
a = [random.randint(80,120) for i in range(100)]
#传入数据,并设置组数
plt.hist(a,bins=20)
#添加网格
plt.grid()
plt.show()
得到的图像如下:
4. 饼状图
plt.pie()
关于plt.pie()的参数
参数名称 | 参数作用 |
---|---|
x | 每个扇形所占的比例或者一个数组 |
labels | 给每个扇形提供标签 |
explode | 输入一个长度为len(x)数组,将每块扇形以输入的距离分离 |
autopct | “%.2f%%”,表示保留两位小数 |
from matplotlib import pyplot as plt
#设置中文
import matplotlib
font = {'family' : 'FangSong'}
matplotlib.rc("font",**font)
#设置标签
tips = ['购物','交通','娱乐','饮食','其他']
#输入每个标签所占的数量
x = [300,200,500,600,400]
#设置分离的距离
apart = [0.03,0.05,0.06,0.04,0.1]
plt.pie(x,labels=tips,autopct='%.2f%%',explode=apart)
plt.show()
得到的图像如下: