在《树莓派5 Debian 12 Bookworm 中 Python 虚拟环境》一文中,我们复刻了树莓派创始人Eben展示的树莓派5的Active冷却器的效果,得到了给四个cpu提高频率后,核心的温度变化值实验数据,以TXT文件形式呈现。如果能够以图形化的形式来表现对读者更有说服力。
安装分析工具pandas和matplotlib
Pandas 是 Python 语言的一个扩展程序库,用于数据分析。提供高性能、易于使用的数据结构和数据分析工具。
Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。可以用来绘制各种静态,动态,交互式的图表。我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
#激活虚拟环境
source /home/pi/my_project/Heating_Cooling/bin/activate
#pip安装pandas库
pip install pandas
#pip安装matplotlib库
pip install matplotlib
#终止虚拟环境输入
deactivate
使用Thonny IDE编程
import pandas as pd
import matplotlib.pyplot as plt
# 用read_csv函数读取txt文件
raw_df = pd.read_csv('readings.txt', sep=',', header=0)
# 打印
print(raw_df)
#将csv文件DataFrame化
df = pd.DataFrame(raw_df)
#删除第2和3两列
df.drop(df.columns[[2, 3]], axis=1, inplace=True)
# 打印
print(df)
#用折线绘制,颜色为红色,标签为带风扇的散热器,虚线,透明度为1,线宽为1
df.plot(x='Elapsed Time (s)',y='Temperature (°c)',kind='line',color='red',label="Active blower",alpha=1,linestyle='--',linewidth=1)
#Y轴的标签为温度单位摄氏度
plt.ylabel('Temperature (°c)')
# 绘图
plt.show()
试验结果
举一反三
我们要把CPU运行的频率也和温度绘制到一张分析图上,更加直观的观察频率和温度的变化关系。
import pandas as pd
import matplotlib.pyplot as plt
raw_df=pd.read_csv('readings.txt', sep=',', header=0)
print(raw_df)
df = pd.DataFrame(raw_df)
df.drop(df.columns[[3]], axis=1, inplace=True)
print(df)
#Matplotlib 创建 总画布figure,在她上面绘制多图subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax1 即可。
fig, ax1 = plt.subplots()
#设置左侧轴
#ax1的x轴标签
ax1.set_xlabel('Elapsed Time (s)')
#ax1的y轴标签
ax1.set_ylabel('Temperature (°c)')
#ax1的y轴刻度
ax1.set_ylim([0,65])
#ax1的x轴为值Elapsed Time,y轴值Temperatur,红色点划线,标签温度单位摄氏度
ax1.plot(df['Elapsed Time (s)'],df['Temperature (°c)'], 'r-', label='Temperature (°c)')
#设置右侧轴
# 将ax1的x轴也分配给ax2使用
ax2 = ax1.twinx()
#ax2的y轴标签
ax2.set_ylabel('Clock Speed (MHz)')
#ax2的y轴刻度
ax2.set_ylim([0,2500])
#ax2的x轴为值Elapsed Time,y轴值Clock Speed,红色点划线,标签时钟频率MHZ
ax2.plot(df['Elapsed Time (s)'],df['Clock Speed (MHz)'], 'g-', label='Clock Speed (MHz)')
lines = ax1.get_lines() + ax2.get_lines()
#直接使用legend()命令,matplotlib会自动检测并生成图例,loc设置标签框的位置0至10取值
ax1.legend(lines, [l.get_label() for l in lines], loc=8)
#将曲线下面的部分全部覆盖为绿色
plt.fill_between(df['Elapsed Time (s)'],df['Clock Speed (MHz)'], color='green', alpha=0.2)
plt.show()