首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在pycharm中使用jupyter进行数据处理及绘图操作时,显示的图像突然丢失了刻度线?

在pycharm中使用jupyter进行数据处理及绘图操作时,显示的图像突然丢失了刻度线?

提问于 2024-11-01 20:16:37
回答 0关注 0查看 23
代码语言:javascript
运行
复制
'''
大气辐射第二次作业
'''
# 第一问洛伦兹展宽
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 假设我们已经从HITRAN提取了波数和吸收系数数据
# wave_numbers = np.array([...])  # 波数数组
# absorption_coefficients = np.array([...])  # 吸收系数数组

# (a) 使用Lorentz线形绘制吸收系数k与波数的关系gamma是半宽
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.family'] = 'DejaVu Sans' # 不知道为什么会出现缺少子图故加上
def lorentzian(nu, s, nu_0, gamma):
    return (s / np.pi) * (gamma / ((nu - nu_0)**2 + gamma**2))

# 定义数据
data = {
    'v': [7280.31512, 7280.47400, 7281.08200, 7281.72912, 7282.70531,
                  7283.01859, 7283.73107, 7284.71668, 7285.04497, 7286.05083,
                  7287.00300, 7287.28900, 7287.50218, 7288.09091, 7290.10832],
    'S': [4.194E-03, 8.872E-04, 3.764E-02, 4.033E-03, 5.673E-04,
                          1.132E-02, 1.710E-02, 2.401E-03, 4.275E-04, 4.732E-03,
                          6.990E-03, 2.285E-02, 2.877E-04, 6.882E-02, 3.226E-02],
    'y_air': [0.0704, 0.0846, 0.0994, 0.0602, 0.0752,
                  0.0680, 0.0710, 0.0702, 0.0866, 0.0683,
                  0.0886, 0.1020, 0.0685, 0.1002, 0.0872]
}

# 创建 DataFrame
data = pd.DataFrame(data)

# # 示例参数
# S = 1.0  # 强度
# nu_0 = 7200  # 中心频率 (cm^-1)
# gamma = 10  # 线宽 (cm^-1)
wave_numbers = np.linspace(7278, 7292, 500)  # 波数范围


# 将数据转换为数值类型
data['v'] = pd.to_numeric(data['v'], errors='coerce')
data['S'] = pd.to_numeric(data['S'], errors='coerce')
data['y_air'] = pd.to_numeric(data['y_air'], errors='coerce')

# 绘制多个不同中心频率的洛伦兹线型
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111)
# 假设我们使用数据中的多个中心频率
# 初始化一个与 wave_numbers 形状相同的数组来存储累积的 k 值
total_k_values = np.zeros_like(wave_numbers)
for index, row in data.iterrows():
    nu_0 = row['v']  # 中心频率
    S = row['S']     # 吸收强度
    gamma = row['y_air']  # 线宽

    k_values = lorentzian(wave_numbers, S, nu_0, gamma)
    # 将当前的 k 值叠加到 total_k_values 中
    total_k_values += k_values
    ax.plot(wave_numbers, k_values, label=f'ν₀={nu_0:.2f} cm⁻¹')


ax.axis([7278, 7292, 1e-6, 1])

# 添加图例,放在坐标轴外部
ax.legend(loc='upper left', bbox_to_anchor=(1, 1))  # 调整位置

# 添加主刻度和次刻度 !!!!!
ax.xaxis.set_major_locator(plt.MultipleLocator(2))  # 主刻度间隔
ax.xaxis.set_minor_locator(plt.MultipleLocator(1))  # 次刻度间隔
ax.yaxis.set_major_locator(plt.LogLocator(base=10.0, numticks=10))  # 使用对数刻度
ax.yaxis.set_minor_locator(plt.LogLocator(base=10.0, subs='auto', numticks=10))
# 设置对数坐标
plt.yscale('log')

# 添加图例和标签
plt.xlabel('Wavenumber (cm$^{-1}$)')
plt.ylabel(r'Absorption Coefficient log(k$_\nu$) (atm cm$^{-1}$)')
plt.title('Absorption Coefficient of H$_{2}$O')
plt.grid(linestyle='--')

在绘制洛伦兹线性的吸收谱线时,第一次运行时图像如下

再次运行时,刻度线突然消失,图像如下:

有没有大佬可以解解惑,在网上搜索了半天一直没有结果。之前也出现过同样的问题,用.py文件运行相同的代码图像没有任何问题。不知道是不是jupyter自身的问题。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档