3、Matplotlib基础绘图:折线图、散点图、柱状图绘制风机运行参数

说到数据可视化,Matplotlib 绝对是 Python 世界里绕不开的库。我刚开始做风机数据分析那会儿,面对一堆 CSV 文件,脑子里全是数字,根本看不出问题在哪。后来学会了画图,嗯,一下子豁然开朗。

这一节,咱们就聊聊怎么用 Matplotlib 画三种最常用的图——折线图、散点图、柱状图。说白了,这三种图基本能覆盖风机运行参数 80% 的可视化需求。

核心知识点速览:

  • 折线图:看趋势,比如风速随时间的变化
  • 散点图:看关系,比如风速与功率的关联
  • 柱状图:看对比,比如各台风机发电量的差异
Matplotlib 基础绘图知识体系 风机运行参数可视化 📈 折线图 风速/功率随时间趋势 🔵 散点图 风速-功率相关性分析 📊 柱状图 多台风机发电量对比 plt.plot() | plt.scatter() | plt.bar() 核心参数:颜色、标签、图例、网格

3.1 折线图:看风速变化趋势

折线图是我用得最多的图。你想想看,风机运行数据本质上就是时间序列——每 10 秒记录一次风速、功率、转速。用折线图一看,趋势一目了然。

我个人习惯用 plt.plot() 来画。这里有个小细节:x 轴通常是时间,y 轴是你要观察的参数

import matplotlib.pyplot as plt
import numpy as np

# 模拟 24 小时风速数据(每 10 分钟一个点)
time = np.arange(0, 24, 0.1667)  # 单位:小时
wind_speed = 8 + 4 * np.sin(0.3 * time) + np.random.normal(0, 0.5, len(time))

plt.figure(figsize=(10, 5))
plt.plot(time, wind_speed, color='#2196F3', linewidth=1.5, label='风速 (m/s)')
plt.xlabel('时间 (小时)')
plt.ylabel('风速 (m/s)')
plt.title('某风机 24 小时风速变化趋势')
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()
plt.show()

💡 我的小技巧:

我在项目中遇到过数据点太多导致折线图变成一团「毛线」的情况。解决办法很简单——alpha 参数降低线条透明度,或者对数据做降采样。比如每 10 个点取一个平均值,图就清爽多了。

3.2 散点图:看风速与功率的关系

折线图看趋势,散点图看关系。风机运行中,我最关心的就是风速和功率的关系——说白了,就是「风大了,电多了没?」

plt.scatter() 画散点图,还能用颜色表示第三个维度,比如温度或者转速。这个技巧我在做异常检测时经常用。

# 模拟风速与功率数据
wind_speed = np.random.uniform(3, 25, 200)
# 功率曲线:低风速时功率低,额定风速后趋于平稳
power = np.where(wind_speed < 12, 
                 0.5 * wind_speed**2, 
                 0.5 * 12**2 + 20 * (wind_speed - 12))
power += np.random.normal(0, 5, len(wind_speed))  # 加噪声

plt.figure(figsize=(8, 6))
scatter = plt.scatter(wind_speed, power, 
                      c=power, cmap='viridis', 
                      alpha=0.6, s=30)
plt.colorbar(scatter, label='功率 (kW)')
plt.xlabel('风速 (m/s)')
plt.ylabel('功率 (kW)')
plt.title('风速-功率散点图(颜色表示功率大小)')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

⚠️ 避坑指南:

我曾经在项目里犯过一个低级错误——散点图的数据点太多(几十万个),结果图一出来全是黑乎乎一片,啥也看不清。后来我学会了两个办法:

  • alpha 参数让点半透明,重叠区域颜色加深,能看出密度分布
  • s 参数调小点的大小,别用默认值

另外,如果数据量特别大,可以考虑用 plt.hexbin() 做六边形分箱图,效果更好。

3.3 柱状图:对比多台风机发电量

柱状图最适合做对比。比如你管着 10 台风机,想知道哪台今天发电最多,哪台最拉胯——柱状图一画,高下立判。

plt.bar() 画柱状图,我个人习惯给柱子加个边框颜色,这样打印出来也清晰。

# 模拟 8 台风机日发电量
turbines = ['风机A', '风机B', '风机C', '风机D', 
            '风机E', '风机F', '风机G', '风机H']
daily_energy = np.random.uniform(80, 120, 8)

plt.figure(figsize=(10, 5))
bars = plt.bar(turbines, daily_energy, 
               color=['#4CAF50', '#2196F3', '#FF9800', '#E91E63',
                      '#9C27B0', '#00BCD4', '#FF5722', '#607D8B'],
               edgecolor='white', linewidth=1.5)

# 在柱子上标数值
for bar, val in zip(bars, daily_energy):
    plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1,
             f'{val:.1f}', ha='center', va='bottom', fontsize=10)

plt.ylabel('日发电量 (MWh)')
plt.title('各风机日发电量对比')
plt.ylim(0, 140)
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()

📌 关键参数总结:

图表类型 核心函数 常用参数 适用场景
折线图 plt.plot() color, linewidth, linestyle, marker 时间序列趋势
散点图 plt.scatter() c, s, alpha, cmap 变量相关性
柱状图 plt.bar() color, edgecolor, width 分类对比

3.4 组合使用:一张图看多个维度

实际项目中,我经常把折线图和柱状图放在一起。比如用柱状图显示每小时的发电量,用折线图叠加风速变化——这样能直观看出「风速高了,发电量是不是也跟着涨了」。

# 双轴图示例
fig, ax1 = plt.subplots(figsize=(10, 5))

hours = np.arange(1, 25)
wind = 8 + 4 * np.sin(0.3 * hours) + np.random.normal(0, 0.5, 24)
energy = wind * 2 + np.random.normal(0, 3, 24)

# 柱状图:发电量
ax1.bar(hours, energy, color='#FF9800', alpha=0.6, label='发电量 (kWh)')
ax1.set_xlabel('小时')
ax1.set_ylabel('发电量 (kWh)', color='#FF9800')
ax1.tick_params(axis='y', labelcolor='#FF9800')

# 折线图:风速
ax2 = ax1.twinx()
ax2.plot(hours, wind, color='#2196F3', linewidth=2, marker='o', label='风速 (m/s)')
ax2.set_ylabel('风速 (m/s)', color='#2196F3')
ax2.tick_params(axis='y', labelcolor='#2196F3')

plt.title('24小时风速与发电量关系')
fig.tight_layout()
plt.show()

💡 经验之谈:

用双轴图时,记得两个 y 轴的单位和量级要匹配。我见过有人把风速(0-15 m/s)和功率(0-2000 kW)放一起,结果风速那条线几乎成了一条直线——因为量级差太多。解决办法是把其中一个数据做归一化,或者用两个 y 轴分别标注。

3.5 保存图片:别让辛苦白费

画完图记得保存。我早期经常忘了这步,结果关了 Jupyter 就得重跑。用 plt.savefig() 保存,支持 PNG、PDF、SVG 等格式。

plt.savefig('风机风速趋势.png', dpi=300, bbox_inches='tight')

⚠️ 注意:

savefig() 一定要在 plt.show() 之前调用。否则保存的可能是空白图——嗯,这个坑我踩过不止一次。

好了,三种基础图就聊到这儿。折线图看趋势,散点图看关系,柱状图看对比——你想想看,风机运行数据里 90% 的问题,用这三张图都能发现端倪。下一节咱们聊聊更高级的交互式可视化,到时候用 Plotly 画能缩放、能悬停的图,那才叫过瘾。


公众号:蓝海资料掘金营,微信deep3321