本章节内容包括以下几方面内容:
代码非常简单,如下所示:
"""绘制曲线 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()

从折线图到光滑的曲线图比较简单,那就是在它们直接插入一些相同趋势的点即可,具体而言在上面代码中更改一个数字即可。
"""绘制曲线 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()

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

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

根据实际需求进行调整绘制
"""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()

时间序列数据的绘制不同之处在于 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
"""时间序列数据示例"""
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()

"""时间序列数据示例-调整尺寸"""
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()

"""时间序列数据示例-调整尺寸"""
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()
效果如图所示:

我们对数据进行切片,只显示一部分数据,处理后代码如下:
"""时间序列数据示例-调整尺寸"""
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()
输出图片为:

这部分内容需要自己根据实际需求处理一下时间的显示格式,操作也同样简单,主要是这一行代码控制格式:
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()
效果如图所示:

如果 x 轴与 y 轴数据长度不等则会提示错。解决方法即通过删除、填充等方法保证长度保持一致。
本博客中用到的图片也属于这种情况,不够高清。但编写的主要目的是对一些常见折线图做简单总结。如果需要让图片更加高清,一般可以考虑以下几个方法:
plt.figure(figsize=(20, 10), dpi=100);pdf 或 svg 或 eps;矢量图支持无限放大,比较方便。折线图的绘制是最简单的可视化方法之一,可以用来描述数据的变化、对比数据的变化、数据与数据在各个时刻(或其他状态)的差异等等。
更多例子后面将会陆续补充,如果有任何问题欢迎留言 ~ 希望可以帮助到各位小伙伴,感谢阅读 ~
如果觉得不错的话,请给本篇博客点个 赞 👍🏻 吧 ~ 感谢 ~
Smileyan
2022.10.21 13:01