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

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

  1. 绘制曲线 python折线图纵坐标刻度 python 折线图_matplotlib;
  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()

python折线图纵坐标刻度 python 折线图_python_02

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

python折线图纵坐标刻度 python 折线图_python_03

1.3 添加一些图片常用属性

包括 python折线图纵坐标刻度 python 折线图_matplotlib_04 轴标题,python折线图纵坐标刻度 python 折线图_数据_05

"""绘制曲线 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()

python折线图纵坐标刻度 python 折线图_时间序列_06

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

python折线图纵坐标刻度 python 折线图_python折线图纵坐标刻度_07

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

python折线图纵坐标刻度 python 折线图_数据_08

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

python折线图纵坐标刻度 python 折线图_python_09

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

python折线图纵坐标刻度 python 折线图_时间序列_10

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

效果如图所示:

python折线图纵坐标刻度 python 折线图_matplotlib_11

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

输出图片为:

python折线图纵坐标刻度 python 折线图_数据_12

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

效果如图所示:

python折线图纵坐标刻度 python 折线图_python_13

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