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

如何在数据转换后基于原始数据设置坐标轴范围(禁用twinx)

概率分布绘图的需求实现方案

需求回顾

现有一段概率分布绘图的Python代码,需调整为:

  • X轴保留原始failure数据的数值范围
  • Y轴范围固定为0到1(对应0%到99.9999%的概率)
  • 不使用双坐标轴(twinx)

当前代码通过对数和极值分布转换实现线性拟合,但绘图时用的是转换后的坐标,不符合需求。

修改后的代码

import numpy as np
import matplotlib.pyplot as plt 

# 原始失效数据
failure = np.array([168, 202, 190, 197, 169, 214, 201, 219, 206, 198, 190, 183, 206, 218, 214, 206, 213, 202, 209, 206])

# 计算概率分布绘图位置(原始概率值)
def plottingPositionOriginal(failure, a=0.3):
    x = np.sort(failure)
    n = len(x)
    F = [(i - a) / (n + 1 - 2 * a) for i in range(1, len(failure)+1)]
    return x, np.array(F)

# 拟合极值分布并返回原始坐标下的拟合值
def plottingPositionFit(failure):
    t, F = plottingPositionOriginal(failure)
    # 转换变量用于线性拟合
    x_log = np.log(t)
    y_transformed = np.log(-np.log(1 - F))
    
    # 拟合线性模型
    beta, c = np.polyfit(x_log, y_transformed, 1)
    # 反向转换得到拟合的概率值
    y_fit_transformed = beta * x_log + c
    F_fit = 1 - np.exp(-np.exp(y_fit_transformed))
    
    return t, F, F_fit

# 获取原始坐标下的数据和拟合值
X_original, Y_original, Y_fit = plottingPositionFit(failure)

# 绘图
fig, ax = plt.subplots()
ax.scatter(X_original, Y_original, label='原始数据点')
ax.plot(X_original, Y_fit, label='拟合线')

# 设置坐标轴范围
ax.set_xlim(np.min(failure), np.max(failure))
ax.set_ylim(0, 1)

# 添加标签和图例
ax.set_xlabel('失效数据')
ax.set_ylabel('累积概率')
ax.legend()

plt.show()

关键修改说明

  1. 保留原始X轴:直接使用plottingPositionOriginal返回的排序后原始失效数据作为X轴坐标,不再用对数转换后的值
  2. Y轴回归0-1范围:通过反向转换拟合后的极值分布值,得到0到1之间的累积概率值F_fit,替代原转换后的Y坐标
  3. 强制坐标轴范围:用set_xlim和set_ylim分别固定X轴为原始失效数据的最小到最大值,Y轴为0到1
  4. 移除双坐标轴依赖:所有绘图都基于同一坐标轴,完全符合需求

内容的提问来源于stack exchange,提问作者A.E

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:43:15