Python | 绘制不同区域或植被类型的均值条形图

职场   2025-02-06 11:57   陕西  
各位同学,大家好!在分析栅格数据的空间分布,尤其是需要生成大量图表时,手动操作可能导致数据处理不一致,且效率低下。我们可以使用Python、Matlab和R等工具进行绘图,确保数据的准确性和格式的一致性。以Python为例:
一、数据准备
需要有不同区域/土地覆被/植被类型的变量各年份均值表格数据,如下图所示。理论上不需要年份列,但我们如果有分段的需求,如2000-2010、2011-2023年,有年份这一列可以帮我们省很多步骤。
二、Python代码
以下Python输出结果,您只需要根据实际情况更改表格路径、对应字段名、年份以及图像的输出路径即可。
import pandas as pdimport matplotlib.pyplot as pltimport os
# 读取 Excel 数据file_path = r"E:\11.xlsx"output_folder = r"E:\空间分布"df = pd.read_excel(file_path)
# 确保输出目录存在os.makedirs(output_folder, exist_ok=True)
# 计算 2000-2023 年均值和标准差df_2000_2023 = df[(df["year"] >= 2011) & (df["year"] <= 2023)]mean_2000_2023 = df_2000_2023.drop(columns=["year"]).mean()std_2000_2023 = df_2000_2023.drop(columns=["year"]).std()

# 定义绘图函数def plot_bar_with_error_and_labels(mean_values, std_values, output_file): x_labels = mean_values.index # 草地类型 x = range(len(x_labels)) # X 轴坐标
plt.figure(figsize=(7, 5)) # 调整图形大小 bars = plt.bar( x, mean_values, yerr=std_values, capsize=6, width=0.6, color='#F8E7C0', edgecolor='black', linewidth=2, alpha=0.9, error_kw={'elinewidth': 2, 'ecolor': 'black'} )
# 添加均值标签在柱子顶部(显示 4 位小数) for i, (bar, value) in enumerate(zip(bars, mean_values)): plt.text( bar.get_x() + bar.get_width() / 2, bar.get_height() + std_values[i], f'{value:.4f}', ha='center', va='bottom', fontsize=14, fontname='Arial' )
# X 轴刻度和标签,确保和柱子对齐 plt.xticks(x, x_labels, rotation=0, ha='center', fontname='Arial', fontsize=14)
# 添加左侧 Y 轴标签 plt.ylabel("这里需要改(单位)", fontsize=14, fontname='SimHei') plt.yticks(fontsize=12, fontname='Arial') # 设置 Y 轴刻度字体
# 设置轴线和刻度线的宽度一致 ax = plt.gca() ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['bottom'].set_linewidth(1.5) ax.spines['left'].set_linewidth(1.5)
# 设置刻度线宽度 plt.tick_params(axis='x', width=1.5) # 设置 X 轴刻度线宽度 plt.tick_params(axis='y', width=1.5) # 设置 Y 轴刻度线宽度
# 保存图像 plt.tight_layout() plt.savefig(output_file, dpi=300, format='png', bbox_inches='tight', transparent=False) # 去除白边,背景不透明 plt.close()

# 绘制并保存 2000-2023 年的图plot_bar_with_error_and_labels( mean_2000_2023, std_2000_2023, os.path.join(output_folder, "2011_2023_gpp_t.png"))
print(f"图像已保存到 {output_folder}")
三、成为会员


GIS遥感数据处理应用
会员:数据处理,ArcGIS/Python/MATLAB/R/GEE教学,指导作图和论文。
 最新文章