2. 显示库之matplotlib(折线图绘制)

实现内容:
    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()

输出:

2. 显示库之matplotlib(折线图绘制)

 画布属性设置和图像的保存

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()

输出:

2. 显示库之matplotlib(折线图绘制) 辅助显示层的完善(改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()

输出:

2. 显示库之matplotlib(折线图绘制)

中文显示的问题解决

# 我们可以发现,在上面的图片中,中文全都是乱码的,以下是解决方法
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()

 2. 显示库之matplotlib(折线图绘制)

添加网格显示

代码:

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()

输出:

2. 显示库之matplotlib(折线图绘制)

添加描述信息

添加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()

 2. 显示库之matplotlib(折线图绘制)

多个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()

 输出:

2. 显示库之matplotlib(折线图绘制)

图例的显示 

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()

输出:

2. 显示库之matplotlib(折线图绘制)

多个子图的绘制:面向对象的绘图方法

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()

输出:
2. 显示库之matplotlib(折线图绘制)

 数学函数图像

代码:

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()

 输出:
2. 显示库之matplotlib(折线图绘制)

学习地址:
黑马程序员Python教程,4天快速入门Python数据挖掘,系统精讲+实战案例_哔哩哔哩_bilibili

上一篇:Python可视化模块——Matplotlib(3)


下一篇:anaconda 使用 pip 安装的踩坑日记