实现内容:
1.折线图绘制和保存图片
1.折线绘制
plt.plot(x, y, color=, linestyle=, label=)
x: 横坐标数值
y: 纵坐标数值
color: 折线颜色
linestyle: 线条样式
label: 折线标签
2.图片保存
plt.savefig(path)
path: 图片保存位置
3.画布的设置
plt.figure(figsize=(), dpi= )
figzize:传入元组,第一个数值为长,第二个数值为宽
dpi:dot per inch,每英尺的点数,即可以设置清晰度和分辨率
2.在辅助显示层上完善折线图
1. 更改x、y坐标轴的刻度
plt.xticks(x, x_)
x是修改之前的值
x_是修改之后的值
plt.yticks(y)
y是传入的一个迭代器
2. 中文显示问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
3. 网格显示
plt.grid(True, linestyle=, alpha=)
True: 代表的是,显示网格
linestyle: 网格的样式
alpha: 网格线的透明度
4. 添加xy轴和标题
1. x轴y轴标题
plt.xlabel('')
plt.ylabel('')
2. 标题
plt.title('')
3.在图像层上完善折线图
1. 多个plot
2. 图例显示
plt.legend(loc=)
loc: 代表的是图例的位置,best、lower left、lower right、upper left、 upper right、center left、center right
4.多个坐标系的显示-plt.subplots(面对对象的画图方法)
面向对象的画图方式和面向过程的画图过程并不想通过,主要注意的方面如下:
1. 画布的建立方式
plt.subplots(nrow=, ncol=, figsize=, dpi=)
1. nrow: 有几行图
2. ncol: 有几列图
3. figsize和dpi与figure的相同
4. return为figure和axes(图的个数)
2. x轴和y轴的设置方法不同
plt.xlabel-->axes[i].set_xlabel
plt.ylabel-->axes[i].set_ylabel
plt.xticks(x, x_)-->axes[i].set_xticks(x) + axes[i].set_xticklabels(x_)
plt.yticks(y)-->axes[i].set_yticks(y)
plt.title()-->axes[i].set_title()
3. 其他方法类似
plt.legend() --> axes.legend()
plt.grid() --> axes.grid()
5.折线图的应用场景
1. 某种事物随着时间变化的关系
2. 数学函数图像的绘制
只要取的点足够多,那么画出的图像就可以足够光滑
原始图像绘制
代码:
import matplotlib.pyplot as plt
# 1.创建画布
plt.figure()
# 2.绘制图像
plt.plot([str(i) for i in range(1, 8)], [13, 17, 15, 10, 19, 11, 17])
# 3.图像显示
plt.show()
输出:
画布属性设置和图像的保存
1. 画布属性设置
1. API:plt.figure(figsize=(), dpi= )
figzize:传入元组,第一个数值为长,第二个数值为宽
dpi:dot per inch,每英尺的点数,即可以设置清晰度和分辨率
2. 保存图片的方式
1. 直接在跳出的窗口中保存
2. 在jupyter中右击图片,然后保存到本地
3. 调用api
plt.savefig(path=)
path: 文件路径
注意,在调用保存图片API的时候,要在plt.show()的上方。因为调用过plt.show()以后,就会释放资源,因此保存后的文件就是空白图片。
代码:
import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(5, 2), dpi=200)
# 2.绘制图像
plt.plot([str(i) for i in range(1, 8)], [13, 17, 15, 10, 19, 11, 17])
# 保存图片
plt.savefig('折线图.png')
# 3.图像显示
plt.show()
输出:
辅助显示层的完善(改x和y的坐标轴刻度)
代码:
import matplotlib.pyplot as plt
import random
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=200)
# 2.绘制图像
plt.plot(range(60), [random.uniform(19, 22) for i in range(60)])
# y刻度的显示
plt.yticks(range(0, 40, 5))
# x刻度的显示
plt.xticks(range(60)[: : 5], ['11时{}分'.format(i * 5) for i in range(12)])
# 3.图像显示
plt.show()
输出:
中文显示的问题解决
# 我们可以发现,在上面的图片中,中文全都是乱码的,以下是解决方法
import matplotlib.pyplot as plt
import random
# 中文显示和正负号问题解决,这是解决的关键!!!!
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=200)
# 2.绘制图像
plt.plot(range(60), [random.uniform(19, 22) for i in range(60)])
# y刻度的显示
plt.yticks(range(0, 40, 5))
# x刻度的显示
plt.xticks(range(60)[: : 5], ['11时{}分'.format(i * 5) for i in range(12)])
# 3.图像显示
plt.show()
添加网格显示
代码:
import matplotlib.pyplot as plt
import random
# 中文显示和正负号问题解决,这是解决的关键!!!!
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=200)
# 2.绘制图像
plt.plot(range(60), [random.uniform(19, 22) for i in range(60)])
# y刻度的显示
plt.yticks(range(0, 40, 5))
# x刻度的显示
plt.xticks(range(60)[: : 5], ['11时{}分'.format(i * 5) for i in range(12)])
# 添加网格显示
plt.grid(True, linestyle='-', alpha=0.5)
# 3.图像显示
plt.show()
输出:
添加描述信息
添加x轴、y轴描述信息及标题
代码:
import matplotlib.pyplot as plt
import random
# 中文显示和正负号问题解决,这是解决的关键!!!!
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=200)
# 2.绘制图像
plt.plot(range(60), [random.uniform(19, 22) for i in range(60)])
# y刻度的显示
plt.yticks(range(0, 40, 5))
# x刻度的显示
plt.xticks(range(60)[: : 5], ['11时{}分'.format(i * 5) for i in range(12)])
# 添加网格显示
plt.grid(True, linestyle='-', alpha=0.5)
# 标记x轴和y轴和标题
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('中午11点0分到12点之间的温度变化图例')
# 3.图像显示
plt.show()
多个plot进行一张图上多个折线图的绘制
import matplotlib.pyplot as plt
import random
# 中文显示和正负号问题解决,这是解决的关键!!!!
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=200)
# 2.绘制图像
plt.plot(range(60), [random.uniform(19, 22) for i in range(60)], color='r', linestyle='-.')
plt.plot(range(60), [random.uniform(2, 5) for i in range(60)], color='b')
# y刻度的显示
plt.yticks(range(0, 40, 5))
# x刻度的显示
plt.xticks(range(60)[: : 5], ['11时{}分'.format(i * 5) for i in range(12)])
# 添加网格显示
plt.grid(True, linestyle='-', alpha=0.5)
# 标记x轴和y轴和标题
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('上海、北京中午11点0分到12点之间的温度变化图例')
# 3.图像显示
plt.show()
输出:
图例的显示
import matplotlib.pyplot as plt
import random
# 中文显示和正负号问题解决,这是解决的关键!!!!
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=200)
# 2.绘制图像
plt.plot(range(60), [random.uniform(19, 22) for i in range(60)], color='r', linestyle='-.',label='上海')
plt.plot(range(60), [random.uniform(2, 5) for i in range(60)], color='b', label='北京')
plt.legend()
# y刻度的显示
plt.yticks(range(0, 40, 5))
# x刻度的显示
plt.xticks(range(60)[: : 5], ['11时{}分'.format(i * 5) for i in range(12)])
# 添加网格显示
plt.grid(True, linestyle='-', alpha=0.5)
# 标记x轴和y轴和标题
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('上海、北京中午11点0分到12点之间的温度变化图例')
# 3.图像显示
plt.show()
输出:
多个子图的绘制:面向对象的绘图方法
plt.subplots()
代码:
import matplotlib.pyplot as plt
import random
# 中文显示和正负号问题解决,这是解决的关键!!!!
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
# 1.创建画布
figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2.绘制图像
axes[0].plot(range(60), [random.uniform(19, 22) for i in range(60)], color='r', linestyle='-.',label='上海')
axes[1].plot(range(60), [random.uniform(2, 5) for i in range(60)], color='b', label='北京')
axes[0].legend()
axes[1].legend()
# y刻度的显示
axes[0].set_yticks(range(0, 40, 5))
axes[1].set_yticks(range(0, 40, 5))
# x刻度的显示
axes[0].set_xticks(range(60)[: : 5])
axes[0].set_xticklabels(['11时{}分'.format(i * 5) for i in range(12)])
axes[1].set_xticks(range(60)[: : 5])
axes[1].set_xticklabels(['11时{}分'.format(i * 5) for i in range(12)])
# 添加网格显示
axes[0].grid(True, linestyle='-', alpha=0.5)
axes[1].grid(True, linestyle='-', alpha=0.5)
# 标记x轴和y轴和标题
axes[0].set_xlabel('时间')
axes[0].set_ylabel('温度')
axes[0].set_title('上海中午11点0分到12点之间的温度变化图例')
axes[1].set_xlabel('时间')
axes[1].set_ylabel('温度')
axes[1].set_title('北京中午11点0分到12点之间的温度变化图例')
# 3.图像显示
plt.show()
输出:
数学函数图像
代码:
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5), dpi=100)
x = np.linspace(-10, 10, 1000)
y = np.sin(x)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.plot(x, y, label='正弦函数', color='r')
plt.show()
输出:
学习地址:
黑马程序员Python教程,4天快速入门Python数据挖掘,系统精讲+实战案例_哔哩哔哩_bilibili