如何用Matplotlib高效绘制地层柱状图?Rectangle方法过于繁琐
地层柱状图绘制优化方案
不用matplotlib.patches.Rectangle逐个绘制的话,推荐先合并连续的同岩性地层段,再用更简洁的批量绘制方法,以下是两种可行方案:
步骤1:预处理数据,合并连续岩性段
首先把连续相同岩性的深度段提取出来,避免重复绘制:
import numpy as np depth = [1,2,3,4,5,6,7,8,9,10] # 地下深度(英尺) lithotype = [4,4,4,5,5,5,6,6,6,2] # 岩性类型:4=粘土,6=砂土,2=粉土 # 提取连续岩性段:(岩性, 顶部深度, 底部深度) groups = [] current_litho = lithotype[0] start_idx = 0 for i in range(1, len(lithotype)): if lithotype[i] != current_litho: groups.append((current_litho, depth[start_idx]-1, depth[i-1])) current_litho = lithotype[i] start_idx = i groups.append((current_litho, depth[start_idx]-1, depth[-1])) # 定义岩性-颜色映射 litho_colors = { 4: "#8B4513", # 粘土:棕色 5: "#D2B48C", # 未定义岩性:黄褐色 6: "#F5DEB3", # 砂土:浅黄色 2: "#C0C0C0" # 粉土:灰色 }
方案1:使用barh绘制水平条形图
地层柱状图本质是垂直方向的堆叠条形,用barh可以快速批量绘制:
import matplotlib.pyplot as plt plt.figure(figsize=(2, 8)) x_center = 0.5 # 柱状图的x轴中心位置 bar_width = 1 # 柱状图宽度 for litho, top, bottom in groups: # 绘制单个地层段:y为顶部深度,高度为地层厚度 plt.barh(y=top, width=bar_width, height=bottom - top, color=litho_colors[litho], edgecolor="black") # 调整坐标轴:y轴反转(深度向下为正),隐藏x轴刻度 plt.ylim(max(depth), 0) plt.xlim(0, bar_width) plt.xticks([]) plt.ylabel("Depth (feet)") plt.title("Stratigraphic Column") plt.show()
方案2:使用fill_between填充区域
如果不需要条形的边框样式,用fill_between更简洁:
import matplotlib.pyplot as plt plt.figure(figsize=(2, 8)) x_range = [0, 1] # 柱状图的x轴范围 for litho, top, bottom in groups: # 填充x_range内、top到bottom之间的区域 plt.fill_between(x_range, top, bottom, color=litho_colors[litho], edgecolor="black") # 同样调整坐标轴 plt.ylim(max(depth), 0) plt.xlim(0, 1) plt.xticks([]) plt.ylabel("Depth (feet)") plt.title("Stratigraphic Column") plt.show()
补充:用Pandas简化分组
如果习惯用Pandas,可以用groupby快速合并连续岩性段:
import pandas as pd df = pd.DataFrame({"depth": depth, "lithotype": lithotype}) # 生成连续岩性的组标签 df["group"] = (df["lithotype"].diff() != 0).cumsum() # 分组计算每个段的顶部、底部深度 grouped = df.groupby("group").agg( lithotype=("lithotype", "first"), top=("depth", lambda x: x.min() - 1), bottom=("depth", "max") ) # 后续绘制逻辑和上面一致,直接遍历grouped的行即可
内容的提问来源于stack exchange,提问作者David Finney
相关产品推荐
相关产品推荐

