文章目录
matplotlib
概念
-
matplotlib能将数据进行可视化,更加直观的呈现
-
使数据更客观,更有说服力
matplotlib是最流行的Python底层绘图库,主要做数据可视化图表,名字取材于matlab,模仿matlab创建
matplotlib官方文档
绘制折线图
from matplotlib import pyplot as plt
x = range(2, 26, 2) # 数据在X轴的位置,是一个可迭代对象
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 24, 22, 18, 15] # 数据在Y轴的数据,是一个可迭代对象
# x轴和y轴的数据一起组成了所有要绘制出的坐标
plt.plot(x, y) # 传入x和y,通过plot绘图
plt.show() # 程序在执行的时候展示图形
设置图片大小
fig = plt.figure(figsize=(20, 8), dpi=80) # 宽20高8,
"""
figure图形图标的意思,在这里指的是我们画的图
通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
在图像模糊的时候可以传入dpi参数,让图片更加清晰
"""
保存图片
plt.savefig("./sig_size.png") # 保存图片,可以保存为svg格式的矢量图
定义坐标轴的疏密
# 设置x轴的刻度
plt.xticks(range(2, 25, 2)) # 步长为刻度,刻度为2(疏密)
# plt.xticks([i / 2 for i in range(4, 50)]) # 刻度为0.5,即可以使用等差列表来去调整刻度(疏密)
# 设置y轴刻度
plt.yticks(range(min(y), max(y)+1, 2)) # y轴范围为13到26
总代码
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20, 8), dpi=80) # 宽20高8,
"""
figure图形图标的意思,在这里指的是我们画的图
通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
在图像模糊的时候可以传入dpi参数,让图片更加清晰
"""
x = range(2, 26, 2) # 数据在X轴的位置,是一个可迭代对象
y = [15, 13, 14.5, 17, 20, 25, 26, 26, 24, 22, 18, 15] # 数据在Y轴的数据,是一个课迭代对象
# x轴和y轴的数据一起组成了所有要绘制出的坐标
plt.plot(x, y) # 传入x和y,通过plot绘图
# 设置x轴的刻度
plt.xticks(range(2, 25, 2)) # 步长为刻度,刻度为2(疏密)
# plt.xticks([i / 2 for i in range(4, 50)]) # 刻度为0.5,即可以使用等差列表来去调整刻度(疏密)
# 设置y轴刻度
plt.yticks(range(min(y), max(y)+1, 2)) # y轴范围为13到26
# plt.savefig("./sig_size.png") # 保存图片,可以保存为svg格式的矢量图
plt.show() # 程序在执行的时候展示图形
案例
import random
from matplotlib import pyplot as plt
"""如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟的气温变化"""
a = [random.randint(20, 35) for i in range(120)]
fig = plt.figure(figsize=(20, 8), dpi=80) # 宽20高8
x = [i for i in range(1, 121)]
y = a
plt.xticks([2 * i for i in range(1, 61)])
plt.yticks([i for i in range(20, 36)])
plt.plot(x, y)
plt.show()
定义坐标轴的刻度
# 在10点时
x_label = [f"10h{
i}m" for i in range(1, 61, 2)]
# 在11点时
x_label += [f"11h{
i}m" for i in range(1, 61, 2)]
plt.yticks([i for i in range(20, 36)], [f"{
i}f" for i in range(20, 36)]) # 后面的参数设置坐标轴显示的样式
plt.xticks([2 * i for i in range(1, 61)], x_label) # 一一对应
设置字体显示中文
为什么无法显示中文
- matplotlib默认不显示中文字符,因为默认的英文字体无法显示汉字
fc-list :lang=zh
- Mac和linux里面查看支持的中文
# windows和linux设置字体的方式
import matplotlib
font = {
'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': 12}
matplotlib.rc("font", **font)
from matplotlib import font_manager
my_font = font_manager.FontProperties(fnanme="字体路径") # 后面使用时输入fontproperties=my_font
# 如:plt.ylabel("温度 单位(摄氏度)", fontproperties=my_font)
添加描述信息
# 设置描述信息
plt.xlabel("时间")
plt.ylabel("温度 单位(摄氏度)")
plt.title("10点到12点没分钟内的气温变换情况")
改进后
import random
from matplotlib import pyplot as plt
"""如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟的气温变化"""
a = [random.randint(20, 35) for i in range(120)]
fig = plt.figure(figsize=(20, 8), dpi=80) # 宽20高8
x = [i for i in range(0, 120)]
y = a
# 在10点时
x_label = [f"10h{
i}m" for i in range(1, 60)]
# 在11点时
x_label += [f"11h{
i}m" for i in range(1, 60)]
import matplotlib
font = {
'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': 12}
matplotlib.rc("font", **font)
# 设置描述信息
plt.xlabel("时间")
plt.ylabel("温度 单位(摄氏度)")
plt.title("10点到12点每分钟内的气温变换情况")
plt.yticks([i for i in range(20, 36)], [f"{
i}度" for i in range(20, 36)]) # 后面的参数设置坐标轴显示的样式
plt.xticks(x[::3], x_label[::3], rotation=90) # 要保证前后的一一对应,rotation旋转度数
plt.plot(x, y)
plt.show()
绘制网格线
# 绘制网格
plt.grid(alpha=0.4) # alpha设置透明度
案例
# 表示出从一个月11号到最后一天30号内每天做的题数如列表a,请绘制折线图,以便分析每天做题的走势
a = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
# 要求:y轴表示个数、x轴表示日期
from matplotlib import pyplot as plt
import matplotlib
# 自己
y = a
x = [i for i in range(11, 31)]
plt.figure(figsize=(20, 8), dpi=80)
# 但是,半路杀出了一个同桌,请设计一个折线图,表示两者做题数量
y_c = [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1]
# 设置轴参数
plt.yticks([i for i in range(min(a), max(a)+1)], [f"{
i}人" for i in range(min(a), max(a)+1)])
plt.xticks(x[::4], [f"{
i}号" for i in range(11, 31, 4)], rotation=90)
plt.xlabel("日期(号)")
plt.ylabel("数量(题)")
plt.title("每天的做题数量情况")
# 绘制网格
plt.grid(alpha=0.4) # 设置透明度
# 设置字体
font = {
'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': 12}
matplotlib.rc("font", **font)
# 自己
plt.plot(x, y, label="自己", color="red") # color添加颜色
# 同桌
plt.plot(x, y_c, label="同桌", color="blue", linestyle='--') # linestyle设置线条样式
# 添加图例
plt.legend(loc="upper left") # loc设置位置
plt.show()
绘制散点图
from matplotlib import pyplot as plt # 其他元素可以直接使用折线图来表示
# 使用scatter绘制散点图和绘制折线图的代码区别
plt