课后作业

  1. “找茬”游戏

    下面是一段某位本科生在撰写“工作面风量监测图”时写的代码,其中存在 3 处典型的概念混淆或语法错误(不考虑缩进问题)。请找出这 3 处错误,说明原因,并用纯正的“面向对象”风格将其改写为正确的代码。

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    time = [1, 2, 3, 4]
    wind = [120, 118, 122, 119]
    
    # 绘制折线
    ax.plot(time, wind, label="进风量")
    
    # 设置标题和标签(这里出了问题!)
    plt.title("工作面进风量监测")
    ax.xlabel("时间 (h)")
    plt.ylabel("风量 (m^3/min)")
    
    ax.legend()
    plt.show()
    
  2. 巷道表面位移预警图

    背景: 在矿井巷道掘进过程中,顶板的下沉量是评估巷道支护稳定性的核心指标。假设《煤矿安全规程》规定该类型巷道的最大允许顶板下沉量为 $150,\mathrm{mm}$。

    任务: 请编写一段完整的 Python 程序,利用以下监测数据绘制一张标准的工程预警分析图,必须满足以下学术细节要求

    1. 包含本章要求的“跨平台中文字体防御代码”与“MathText 公式引擎”。
    2. 坐标轴标签必须包含物理量符号与正体单位,例如:时间 $t$ ($\mathrm{d}$)、下沉量 $D$ ($\mathrm{mm}$)。
    3. 使用 axhline 在 $150,\mathrm{mm}$ 处画一条红色的虚线(警戒线),并添加图例“位移极限”。
    4. 使用 axhspan 将 $150,\mathrm{mm}$ 以上的区域填充为浅红色(alpha=0.1),表示“支护失效危险区”。
    5. 使用 annotate 加上箭头,指向第 15 天的数据点,并标注文本“突破预警值”。

    实测数据:

    • 监测时间 days (单位: d): [0, 3, 6, 9, 12, 15, 18, 21, 24]
    • 顶板下沉量 subsidence (单位: mm): [0, 12, 35, 68, 105, 155, 182, 195, 201]
  3. 多图排版综合挑战:岩体单轴压缩破坏的前兆特征

    背景: 在岩石力学实验中,为了研究岩石(如砂岩)在受压破坏前的前兆特征,研究人员通常会同步监测“偏应力”与内部微破裂产生的“声发射(Acoustic Emission, AE)振铃计数”。这需要将不同量纲的数据放在同一时间轴上进行比对。

    任务: 请运用 plt.subplots(nrows=2, ncols=1, sharex=True) 机制,绘制一张 2 行 1 列的对析图,并最终导出为高质量的学术矢量图。

    实测数据:

    • 加载时间 time (s): [0, 10, 20, 30, 40, 50, 60]
    • 偏应力张量第二不变量 $J_2$ ($\mathrm{MPa^2}$): [0, 25, 80, 150, 240, 210, 50] (注:40秒时达到峰值后破坏)
    • 声发射振铃计数 ae_counts (次): [5, 12, 18, 45, 320, 850, 150]

    图表要求:

    1. 上半区 (ax1):绘制加载时间与偏应力 $J_2$ 的折线图,颜色使用蓝色 (steelblue),线宽设为 2。
    2. 下半区 (ax2):绘制加载时间与声发射计数的柱状图 (ax.bar),颜色使用橙色 (darkorange)。
    3. 坐标轴标签排版:上半区图纸只需带有标题(如“岩石破裂过程的多场响应特征”),隐藏 X 轴标签(因为与下半区共享);下半区必须标明 X 轴标签为 加载时间 \(t\) (\(\mathrm{s}\))
    4. 高质量输出:使用 tight_layout() 防止重叠,并使用 savefig 将图表导出为名为 rock_failure_analysis.pdf 的文件,确保裁剪掉多余白边(bbox_inches="tight")。
多图排版与高质量输出上机实验