matplotlib基本要点
画出一天的气温图
程序例子:
from matplotlib import pyplot as plt
# 数据在X轴的位置,是一个可迭代对象
x = range(2, 26, 2)
# 数据在y轴的位置,是一个可迭代对象
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 24, 22, 18, 15]
# 传入x和y,通过pyplot制图
plt.plot(x, y)
# 显示图片
plt.show()
效果图:
存在的问题:
改进程序
设置图片大小
plt.figure(figsize=(20, 8), dpi=80)
figure图形化图标的意思,在这里指的就是我们画的图
figsize表示图片的长和高
dpi指的是每英寸像素的个数
通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
在图片模糊的时候传入dpi让图片更清晰
from matplotlib import pyplot as plt
# 数据在X轴的位置,是一个可迭代对象
x = range(2, 26, 2)
# 数据在y轴的位置,是一个可迭代对象
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 24, 22, 18, 15]
# 设置图片大小
plt.figure(figsize=(20, 8), dpi=80)
# 传入x和y,通过pyplot制图
plt.plot(x, y)
# 显示图片
plt.show()
保存图片
# 设置保存位置以及名称
plt.savefig('./t1.png')
plt.savefig(‘sig_size.svg’) # svg格式是矢量图格式,放大不会有锯齿状
自定义x, y轴刻度
plt.xticks(x) # 把每一个x值赋值在刻度上
plt.xticks(range(2, 25)) # range方法控制x轴点数
_xtick_labels = [i/2 for i in range(4,49)]
plt.xticks(_xtick_labels)
plt.xticks(_xtick_labels[::2]) # 按步长取参数
完整程序
from matplotlib import pyplot as plt
# 数据在X轴的位置,是一个可迭代对象
x = range(2, 26, 2)
# 数据在y轴的位置,是一个可迭代对象
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 24, 22, 18, 15]
# 设置图片大小
plt.figure(figsize=(20, 8), dpi=80)
# 传入x和y,通过pyplot制图
plt.plot(x, y)
# 设置x轴刻度
_xtick_labels = [i/2 for i in range(4,49)]
plt.xticks(_xtick_labels)
plt.xticks(_xtick_labels[::2]) # 按步长取参数
# 设置y轴刻度
plt.yticks(range(min(y), max(y)+1)) # 按步长取参数
# 显示图片
plt.show()
问题1:
列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
a = [random.randint(20, 35) for i in range(120)]
代码如下
from matplotlib import pyplot as plt
import matplotlib
import random
x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]
font = {'family':'SimHei',
'weight':'bold',
'size':16}
matplotlib.rc('font', **font)
plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y)
_x = [f'10点{i}分' for i in range(0, 60)]
_x += [f'11点{i}分' for i in range(0, 60)]
plt.xticks(list(x)[::3], labels=_x[::3], rotation=45)
plt.show()
字体调整
font = {'family':'SimHei',
'weight':'bold',
'size':16}
matplotlib.rc('font', **font)
设置标题
# 设置标题
plt.xlabel('时间')
plt.ylabel('温度(摄氏度)')
plt.title('10点到12点温度图')
完整代码
from matplotlib import pyplot as plt
import matplotlib
import random
x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]
# font = {'family':'MicroSoft YaHei',
font = {'family':'SimHei',
'weight':'bold',
'size':16}
matplotlib.rc('font', **font)
plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y)
# 调整横坐标
_x = [f'10点{i}分' for i in range(0, 60)]
_x += [f'11点{i}分' for i in range(0, 60)]
plt.xticks(list(x)[::3], labels=_x[::3], rotation=45)
# 设置标题
plt.xlabel('时间')
plt.ylabel('温度(摄氏度)')
plt.title('10点到12点温度图')
plt.show()
问题2
给折线统计图设置一个网格背景
# 设置显示网格(alpha网格透明度)
plt.grid(alpha=0.4)
完整代码如下
from matplotlib import pyplot as plt
import matplotlib
x = [i for i in range(11, 30)]
y = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 3, 3, 1, 1, 1]
# 显示中文,支持符号
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['axes.unicode_minus'] = False
plt.plot(x, y)
# 设置横纵坐标值
_x = [f'{i}岁' for i in range(11, 30)]
_y = [f'{i}个' for i in y]
plt.xticks(x[::2], _x[::2])
plt.yticks(y, _y)
# 设置显示网格(alpha网格透明度)
plt.grid(alpha=0.4)
# 设置标题
plt.xlabel('年龄')
plt.ylabel('个数')
plt.title('年龄交友个数')
plt.show()
问题3:
同时绘制两个人的统计图
新增图例功能
plt.legend()
代码如下:
from matplotlib import pyplot as plt
import matplotlib
x = [i for i in range(11, 30)]
y1 = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 3, 3, 1, 1, 1]
y2 = [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
# 显示中文,支持符号
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['axes.unicode_minus'] = False
# 设置图片大小
plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x, y1, label='自己')
plt.plot(x, y2, label='同桌')
# 设置横纵坐标值
_x = [f'{i}岁' for i in range(11, 30)]
_y = [f'{i}个' for i in y1]
plt.xticks(x[::2], _x[::2])
plt.yticks(y1, _y)
# 设置显示网格(alpha网格透明度)
plt.grid(alpha=0.4)
# 设置标题
plt.xlabel('年龄')
plt.ylabel('个数')
plt.title('年龄交友个数')
# 添加图例
plt.legend()
plt.show()