Python如何将已实现的温度数据折线图转换为对应直方图?
4传感器温度直方图对比实现方案
你当前的代码是绘制小时-温度折线图的逻辑,直方图核心是统计温度值的出现频次,不需要用到小时维度数据,直接提取每个数组的温度列(jun20BHX[:,2])作为输入即可,以下是两种常用的对比实现方案:
方案1:同坐标系分组对比(适合快速对比分布差异)
import matplotlib.pyplot as plt import numpy as np # 提取所有传感器的温度数据与对应标签 temp_data = [jun20BH1[:,2], jun20BH2[:,2], jun20BH3[:,2], jun20BH4[:,2]] labels = ['Full Shade', 'Full Sun', 'Partial Sun #1', 'Partial Sun #2'] # 统一设置分箱(如果你已经完成分箱,直接替换为你的分箱边界数组即可) bins = np.linspace(min(np.hstack(temp_data)), max(np.hstack(temp_data)), 15) # 绘制分组直方图 plt.hist(temp_data, bins=bins, label=labels, alpha=0.7, edgecolor='black', linewidth=1) # 样式设置和你原有习惯保持一致 plt.xlabel("Temperature (F)", fontsize = 24) plt.ylabel("Frequency", fontsize = 24) plt.xticks(fontsize = 20) plt.yticks(fontsize = 20) plt.legend(fontsize = 20) plt.title("June 20 Boerum Hill Temperature Distribution", fontsize = 50) plt.show()
参数说明:
- 统一设置bins是为了保证4组数据的分箱规则完全一致,避免因分箱不同导致的对比偏差
- alpha设置为0.7是为了避免柱子重叠时被完全遮挡,可根据显示效果调整
- 如果不需要半透明叠加,想要完全并排的分组柱形,添加参数
histtype='bar'即可
方案2:分面子图对比(适合单独看每个传感器的分布特征)
如果同坐标系显示太拥挤,可以用2行2列的子图分别绘制,保持所有子图的坐标轴范围一致方便对比:
import matplotlib.pyplot as plt import numpy as np temp_data = [jun20BH1[:,2], jun20BH2[:,2], jun20BH3[:,2], jun20BH4[:,2]] labels = ['Full Shade', 'Full Sun', 'Partial Sun #1', 'Partial Sun #2'] bins = np.linspace(min(np.hstack(temp_data)), max(np.hstack(temp_data)), 15) # 创建2行2列子图,共享x、y轴 fig, axs = plt.subplots(2, 2, figsize=(16, 12), sharex=True, sharey=True) axs = axs.flatten() for i in range(4): axs[i].hist(temp_data[i], bins=bins, color=f'C{i}', edgecolor='black', alpha=0.7) axs[i].set_title(labels[i], fontsize=20) axs[i].tick_params(axis='both', labelsize=16) # 统一设置坐标轴标签 fig.supxlabel('Temperature (F)', fontsize=24) fig.supylabel('Frequency', fontsize=24) fig.suptitle("June 20 Boerum Hill Temperature Distribution", fontsize=40) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者AlexF
相关产品推荐
相关产品推荐

