• 《python 可视化之 matplotlib》第一章 折线图 plot


    《python 数据可视化基础》第一章 折线图

    本章节内容包括以下几方面内容:

    1. 绘制曲线 y = x 2 y=x^2 y=x2;
    2. 让曲线更加光滑;
    3. 常见的相关属性设置;
    4. 多条折线图的绘制;
    5. 折线图之间的颜色填充;
    6. 时间序列可视化;
    7. 常见问题归纳。

    1.1 绘制曲线 y = x 2 y=x^2 y=x2

    代码非常简单,如下所示:

    """绘制曲线 y = x^2"""
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    if __name__ == '__main__':
        x = np.linspace(0, 10, 5)
        y = np.square(x)
        plt.plot(x, y)
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    图 1.1 第一个绘制程序

    1.2 让曲线更加光滑

    从折线图到光滑的曲线图比较简单,那就是在它们直接插入一些相同趋势的点即可,具体而言在上面代码中更改一个数字即可。

    """绘制曲线 y = x^2"""
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    if __name__ == '__main__':
        x = np.linspace(0, 10, 20)
        y = np.square(x)
        plt.plot(x, y)
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    1.3 添加一些图片常用属性

    包括 x x x 轴标题, y y y 轴标题,图片的标题。

    """绘制曲线 y = x^2"""
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    if __name__ == '__main__':
        x = np.linspace(0, 10, 20)
        y = np.square(x)
        plt.plot(x, y)
        plt.title("demo y=x*x")
        plt.ylabel("y")
        plt.xlabel("x")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    1.4 绘制多条曲线

    """绘制曲线 y = x^2"""
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    if __name__ == '__main__':
        x = np.linspace(0, 1.5, 100)
        y1 = np.square(x)
        y2 = np.sqrt(x)
        plt.plot(x, y1)
        plt.plot(x, y2)
        methods = ["y=x^2", "y=sqrt(x)"]
        # 根据实际需要设定标签名字以及对应的位置,不填写时将会自动选择合适的位置
        plt.legend(methods, loc='upper left')
        plt.title("demo y=x*x")
        plt.ylabel("y")
        plt.xlabel("x")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    1.5 曲线之间填充

    根据实际需求进行调整绘制

    """fill_between示例"""
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    if __name__ == '__main__':
        x = np.linspace(0, 1, 16)
        y1 = x * x
        y2 = x
        plt.fill_between(x, y1, y2, alpha=.5, linewidth=0)
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    1.6 时间序列可视化

    时间序列数据的绘制不同之处在于 x 轴显示的是时间,之所以特地摘出来是因为这部分内容常常需要一些处理技巧。比如将原本的时间戳替换成为 2022-10-21 23:00:23 这种格式,亦或者替换成为只显示时间的如 22:00 24:00 等。

    数据集可以随便选一个数据集,cpu4.csv 文件,下载地址为 蓝奏云, 亦或者前去 github 下载,地址为:https://github.com/NetManAIOps/donut/blob/master/sample_data/cpu4.csv

    1.6.1 直接绘制

    """时间序列数据示例"""
    import pandas as pd
    from matplotlib import pyplot as plt
    
    if __name__ == '__main__':
        df = pd.read_csv("../data/cpu4.csv")
        timestamps = df["timestamp"].values
        values = df["value"].values
        # 开始绘制
        plt.plot(timestamps, values)
        plt.title("time series demo")
        plt.xlabel("timestamp")
        plt.ylabel("value")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    1.6.2 调整尺寸

    """时间序列数据示例-调整尺寸"""
    import pandas as pd
    from matplotlib import pyplot as plt
    
    
    if __name__ == '__main__':
        df = pd.read_csv("../data/cpu4.csv")
        timestamps = df["timestamp"].values
        values = df["value"].values
        # 开始绘制
        plt.figure(figsize=(20, 6))
        plt.plot(timestamps, values)
        plt.title("time series demo")
        plt.xlabel("timestamp")
        plt.ylabel("value")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    1.6.3 设置 x 轴标签为日期

    """时间序列数据示例-调整尺寸"""
    import pandas as pd
    from matplotlib import pyplot as plt
    
    
    if __name__ == '__main__':
        df = pd.read_csv("../data/cpu4.csv")
        timestamps = df["timestamp"].values
        values = df["value"].values
        # 格式转换
        datetime = pd.to_datetime(timestamps, unit="s")
        plt.figure(figsize=(20, 6))
        plt.plot(datetime, values)
        plt.title("time series demo")
        plt.xlabel("datetime")
        plt.ylabel("value")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    效果如图所示:
    在这里插入图片描述

    1.6.4 缩短数据长度自动显示日期与时辰

    我们对数据进行切片,只显示一部分数据,处理后代码如下:

    """时间序列数据示例-调整尺寸"""
    import pandas as pd
    from matplotlib import pyplot as plt
    
    
    if __name__ == '__main__':
        df = pd.read_csv("../data/cpu4.csv")
        timestamps = df["timestamp"].values[:40]
        values = df["value"].values[:40]
        # 开始绘制
        datetime = pd.to_datetime(timestamps, unit="s")
        plt.figure(figsize=(20, 6))
        plt.plot(datetime, values)
        plt.title("time series demo")
        plt.xlabel("datetime")
        plt.ylabel("value")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输出图片为:

    在这里插入图片描述

    1.6.5 个性化处理时间格式

    这部分内容需要自己根据实际需求处理一下时间的显示格式,操作也同样简单,主要是这一行代码控制格式:

    plt.gca().xaxis.set_major_formatter(mdate.DateFormatter("%H:%M")),其中 mdate 来自于 matplotlib.dates。

    具体内容请看代码:

    """时间序列数据示例-调整尺寸"""
    import time
    
    import dateutil
    import pandas as pd
    from matplotlib import pyplot as plt
    import matplotlib.dates as mdate
    
    if __name__ == '__main__':
        df = pd.read_csv("../data/cpu4.csv")
        timestamps = df["timestamp"].values[:20]
        values = df["value"].values[:20]
        # 开始绘制
        datetime_array = pd.to_datetime(timestamps, unit="s")
        plt.figure(figsize=(20, 6), dpi=100)
        # 注意这一行是控制格式的关键
        plt.gca().xaxis.set_major_formatter(mdate.DateFormatter("%H:%M"))
        plt.plot(datetime_array, values)
        plt.title("time series demo")
        plt.xlabel("datetime")
        plt.ylabel("value")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    效果如图所示:
    在这里插入图片描述

    1.7 常见问题收录

    1.7.1 数据长度不等

    如果 x 轴与 y 轴数据长度不等则会提示错。解决方法即通过删除、填充等方法保证长度保持一致。

    1.7.2 绘制图片不够高清

    本博客中用到的图片也属于这种情况,不够高清。但编写的主要目的是对一些常见折线图做简单总结。如果需要让图片更加高清,一般可以考虑以下几个方法:

    • 调整图片尺寸;
    • 设置 dpi,如 plt.figure(figsize=(20, 10), dpi=100)
    • 保存图片的格式更改为 pdfsvgeps;矢量图支持无限放大,比较方便。

    1.8 总结

    折线图的绘制是最简单的可视化方法之一,可以用来描述数据的变化、对比数据的变化、数据与数据在各个时刻(或其他状态)的差异等等。

    更多例子后面将会陆续补充,如果有任何问题欢迎留言 ~ 希望可以帮助到各位小伙伴,感谢阅读 ~

    如果觉得不错的话,请给本篇博客点个 赞 👍🏻 吧 ~ 感谢 ~

    Smileyan
    2022.10.21 13:01

  • 相关阅读:
    Causality
    ELK安装、部署、调试 (二) ES的安装部署
    【大数据面试题】011 Hive的内部外部表
    【C++】:模板的使用
    python LeetCode 刷题记录 104
    【深度学习_TensorFlow】卷积神经网络(CNN)
    开机优化加速
    Lucene全文检索
    Kotlin协程:父子协程的绑定与传递
    Java基础知识面试题
  • 原文地址:https://blog.csdn.net/smileyan9/article/details/127295033