赞
踩
背景:有八张分层的土壤有机碳含量图,要按土地利用/坡向/海拔的分类图分别制作每一种协变量下每一张图层的箱线图——先在ArcGIS里提取四分位数,再导入matlab制作箱线图。
import arcpy
import numpy as np
import matplotlib.pyplot as plt
from arcpy.sa import *
# 设置工作空间
arcpy.env.workspace = "C:\\工作空间的文件夹名"
# 设置掩膜和地图的名称列表
mask_names = ["mask1", "mask2", "mask3"]
#输入需要提取的多张掩膜名字,需要注意,在这之前需要先在arcgis里把掩膜分好
map_names = ["map1","map2"]
#输入需要提取的多张地图名字
# 存储结果的列表
results = []
# 循环遍历掩膜和地图名称列表
for mask_name in mask_names:
mask_path = mask_name + ".tif"
for map_name in map_names:
map_path = map_name + ".tif"
# 使用按掩膜提取工具进行栅格提取
outExtractByMask = ExtractByMask(map_path, mask_path)
# 将提取的栅格数据转换为NumPy数组,并用 np.nan 替换 NoData 值
np_array = arcpy.RasterToNumPyArray(outExtractByMask, nodata_to_value=np.nan)
# 计算栅格数据的四分位数,忽略 np.nan 值
quartiles = np.nanpercentile(np_array, [25, 75])
# 打印栅格属性信息
result = [map_name, mask_name, np.nanmin(np_array), np.nanmax(np_array), np.nanmean(np_array), quartiles[0], np.nanmedian(np_array), quartiles[1]]
results.append(result)
# 将所有结果输出到TXT文件
output_folder = "C:\\输出文件夹"
output_file = "文件名.txt"
output_path = "{}\\{}".format(output_folder, output_file)
with open(output_path, 'w') as f:
# 写入表头
f.write("Map Name,Mask Name,Minimum,Maximum,Mean,Quartile1,Median,Quartile3\n")
# 写入结果
for result in results:
f.write("{},{},{},{},{},{},{},{}\n".format(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7]))
注:将文本文件导入excel并按逗号分列,删去平均值列,将最大值放在最后一列,从左到右从小到大排好,删去第一行,前两列的mask和map名可以保留
%% % 读取数据
% 读取Excel表格中的数据
data = readmatrix('C:\表格位置\表格名.xlsx','Range','A1:G32');
%表格范围保留了不参与绘制的前两列,注意选择范围
% 将每行的第三到第七列数据构成一个箱子
num_box = size(data,1) / 4;
%此处的分母与每张图中需要的箱子数一致,也就是上文的mask数量
box_data = cell(num_box,1);
for i = 1:num_box
box_data{i} = data((i-1)*4+1:i*4,3:7)';
%这里的4仍旧是掩膜数,3:7是选择的列的范围,可以调
end
% 绘制箱型图
figure;
for i = 1:num_box
subplot(2,4,i);
%这里的2,4指的是一列两个,一行四个
b=boxplot(box_data{i},'Colors','k','Symbol','k+');
set(b(7,:), 'LineWidth', 3, 'Color', 'k');
set(gca,'Color','w','LineWidth',1,'TickLength',[0.02 0.025]);
title([' '],'Color','k');
xlabel([' '],'Color','k');
set(gca,'XTickLabel',[]);
end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。