折线图 plot
Posted smile-yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折线图 plot相关的知识,希望对你有一定的参考价值。
《python 可视化之 matplotlib》第一章 折线图
本章节内容包括以下几方面内容:
- 绘制曲线 y = x 2 y=x^2 y=x2;
- 让曲线更加光滑;
- 常见的相关属性设置;
- 多条折线图的绘制;
- 折线图之间的颜色填充;
- 时间序列可视化;
- 常见问题归纳。
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 让曲线更加光滑
从折线图到光滑的曲线图比较简单,那就是在它们直接插入一些相同趋势的点即可,具体而言在上面代码中更改一个数字即可。
"""绘制曲线 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.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.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.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.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.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.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.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.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.7 常见问题收录
1.7.1 数据长度不等
如果 x 轴与 y 轴数据长度不等则会提示错。解决方法即通过删除、填充等方法保证长度保持一致。
1.7.2 绘制图片不够高清
本博客中用到的图片也属于这种情况,不够高清。但编写的主要目的是对一些常见折线图做简单总结。如果需要让图片更加高清,一般可以考虑以下几个方法:
- 调整图片尺寸;
- 设置 dpi,如
plt.figure(figsize=(20, 10), dpi=100)
; - 保存图片的格式更改为
pdf
或svg
或eps
;矢量图支持无限放大,比较方便。
1.8 总结
折线图的绘制是最简单的可视化方法之一,可以用来描述数据的变化、对比数据的变化、数据与数据在各个时刻(或其他状态)的差异等等。
更多例子后面将会陆续补充,如果有任何问题欢迎留言 ~ 希望可以帮助到各位小伙伴,感谢阅读 ~
如果觉得不错的话,请给本篇博客点个 赞 👍🏻 吧 ~ 感谢 ~
Smileyan
2022.10.21 13:01
以上是关于折线图 plot的主要内容,如果未能解决你的问题,请参考以下文章