如何用Matplotlib绘制井深区间对应参数的垂直柱状图?
绘制井深区间参数的2D图表
方案1:水平条形图(符合测井图常规展示)
这种方式将深度作为y轴(从上到下数值递增),参数值作为条形长度,每个条形刚好覆盖对应的深度区间:
import pandas as pd import matplotlib.pyplot as plt # 加载数据集 df = pd.DataFrame( { "depth in": [1000, 1020, 1040], "depth out": [1020, 1040, 1060], "Parameter": [10, 15, 5], } ) # 计算深度区间长度和区间中点 df['depth_interval'] = df['depth out'] - df['depth in'] df['depth_midpoint'] = (df['depth in'] + df['depth out']) / 2 # 创建绘图对象 fig, ax = plt.subplots(figsize=(8, 6)) # 绘制水平条形:y轴为区间中点,条形高度为区间长度,宽度为参数值 ax.barh(df['depth_midpoint'], df['Parameter'], height=df['depth_interval'], align='center', color='steelblue') # 反转y轴,让深度数值越大的区间越靠下(符合测井图习惯) ax.invert_yaxis() # 设置坐标轴标签和标题 ax.set_xlabel('参数值') ax.set_ylabel('深度') ax.set_title('井深区间参数分布') # 自动调整布局,避免标签被截断 plt.tight_layout() plt.show()
方案2:垂直柱状条(按需求实现)
如果需要垂直方向的柱状条,让每个柱子的水平范围覆盖深度区间,高度对应参数值:
import pandas as pd import matplotlib.pyplot as plt # 加载数据集 df = pd.DataFrame( { "depth in": [1000, 1020, 1040], "depth out": [1020, 1040, 1060], "Parameter": [10, 15, 5], } ) # 计算深度区间长度和区间中点 df['depth_interval'] = df['depth out'] - df['depth in'] df['depth_midpoint'] = (df['depth in'] + df['depth out']) / 2 # 创建绘图对象 fig, ax = plt.subplots(figsize=(8, 6)) # 绘制垂直柱状:x轴为区间中点,柱子宽度为区间长度,高度为参数值 ax.bar(df['depth_midpoint'], df['Parameter'], width=df['depth_interval'], align='center', color='coral') # 设置坐标轴标签和标题 ax.set_xlabel('深度') ax.set_ylabel('参数值') ax.set_title('井深区间参数分布') # 自动调整布局 plt.tight_layout() plt.show()
常见坐标轴问题解决
- 如果使用水平条形图,必须反转y轴,否则深度数值大的区间会出现在顶部,不符合常规认知。
- 确保条形的
height(水平条形)或width(垂直条形)设置为深度区间的长度,这样柱子才能精准覆盖depth in到depth out的范围。 - 用区间中点作为条形的定位基准,能保证柱子居中在对应深度区间内。
内容的提问来源于stack exchange,提问作者Denis Pro
相关产品推荐
相关产品推荐

