You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用Matplotlib和Pandas绘制岩性RQD占比柱状图

解决方案

要实现每个岩性下各RQD区间的占比展示,核心是先计算单种岩性的总长度,再用各区间长度除以该总长度得到占比。以下是修改后的完整代码:

import pandas as pd
import matplotlib.pyplot as plt

# 定义RQD区间和对应名称
ranges = [(0, 10), 
          (10.00001, 20), 
          (20.00001, 30), 
          (30.00001, 40), 
          (40.00001, 50), 
          (50.00001, 60), 
          (60.00001, 70), 
          (70.00001, 80), 
          (80.0001,90), 
          (90.00001, 1000)]
names = ["0 to 10", 
         "10 to 20", 
         "20 to 30", 
         "30 to 40", 
         "40 to 50", 
         "50 to 60", 
         "60 to 70", 
         "70 to 80", 
         "80 to 90", 
         "90 to 100"]

# 给RQD值分配对应区间名称的函数
def assign_name(value):
  for low, high in ranges:
    if low <= value <= high:
      return names[ranges.index((low, high))]
  return None  # 处理超出所有区间的值

# 添加RQD区间列和长度列
df['RQD_Bin'] = df['RQD'].apply(assign_name)
df["Length"] = df["To"] - df["From"]

# --- 关键修改部分 ---
# 计算每个岩性的总长度,并添加到原数据中
df['Lithology_Total_Length'] = df.groupby('Lithology')['Length'].transform('sum')
# 计算每个区间在对应岩性中的占比
df['Length_Percent'] = df['Length'] / df['Lithology_Total_Length']

# 按岩性和RQD区间分组,求和占比
lithology_distr = df.groupby(['Lithology', 'RQD_Bin'])['Length_Percent'].sum().unstack()

# 绘制柱状图
lithology_distr.plot(kind='bar', stacked=False)

# 自定义图表样式
plt.xlabel('岩性')
plt.ylabel('RQD区间占比')  # 更新Y轴标签为占比
plt.title('各岩性下RQD区间占比分布')
plt.legend(title='RQD区间')
plt.xticks(rotation=90)
# 可选:将Y轴格式化为百分比显示,更直观
plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda x, p: f'{x*100:.1f}%'))

# 保存并展示图表
plt.savefig("RQD_Distribution_Percent.png")
plt.show()

核心修改说明

  1. 计算岩性总长度:用transform('sum')可以给每一行自动匹配对应岩性的总长度,无需手动合并数据集。
  2. 生成占比列:直接用单区间长度除以对应岩性的总长度,得到0-1范围的占比数值。
  3. 分组逻辑调整:现在分组后求和的是占比,最终每个岩性下所有RQD区间的占比之和为1(即100%)。
  4. 图表优化:更新Y轴标签为占比,添加百分比格式化器让显示更清晰。

内容的提问来源于stack exchange,提问作者cbarnard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:45:04