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

Python实现Matlab wblplot()风格威布尔概率图的方法问询

Python复现Matlab wblplot()威布尔概率图方案

一、现成库快速实现(推荐reliability库)

reliability是专注于可靠性工程的第三方库,直接支持生成和Matlab wblplot()一致的威布尔概率图,自动处理非均匀刻度、参数拟合问题,无需手动调整。

安装与使用

pip install reliability
from reliability.Fitters import Fit_Weibull_2P
from reliability.Probability_plotting import plot_points
import matplotlib.pyplot as plt

# 替换为你的实际数据集
data = [12, 25, 30, 42, 55, 68, 72, 85, 90, 105]

# 拟合2参数威布尔分布(固定位置参数为0)
fit = Fit_Weibull_2P(failures=data)
print(f"形状参数k: {fit.beta:.3f}, 尺度参数λ: {fit.alpha:.3f}")

# 生成威布尔概率图,自动处理y轴非均匀刻度
plot_points(failures=data, dist='Weibull', show_plot=True)
plt.show()

二、自定义实现(手动处理刻度与拟合)

如果不想依赖第三方库,可通过以下步骤手动实现:

1. 编程拟合形状与尺度参数

使用scipy.stats.weibull_min的fit()方法,固定位置参数为0(符合标准威布尔分布假设):

import numpy as np
from scipy.stats import weibull_min

data = np.array([12, 25, 30, 42, 55, 68, 72, 85, 90, 105])

# 拟合2参数威布尔分布
shape, loc, scale = weibull_min.fit(data, floc=0)
print(f"形状参数k: {shape:.3f}, 尺度参数λ: {scale:.3f}")

2. 手动设置y轴非均匀刻度

威布尔概率图的y轴是双对数变换后的累积失效概率,直接用均匀刻度会导致低概率区域拥挤,需手动指定关键分位数作为刻度点:

import matplotlib.pyplot as plt

# 排序数据并计算中位秩(与Matlab wblplot分位数计算逻辑一致)
sorted_data = np.sort(data)
n = len(sorted_data)
p = (np.arange(n) + 0.3) / (n + 0.4)  # 中位秩公式,比简单分位数更准确

# 坐标转换:x取自然对数,y取ln(-ln(1-p))
x_plot = np.log(sorted_data)
y_plot = np.log(-np.log(1 - p))

# 拟合转换后的直线,斜率为形状参数k,截距推导尺度参数λ
slope, intercept = np.polyfit(x_plot, y_plot, 1)
fit_shape = slope
fit_scale = np.exp(-intercept / slope)

# 自定义y轴刻度:选择低概率区间隔更大的分位数
p_ticks = [0.01, 0.05, 0.1, 0.2, 0.3, 0.5, 0.7, 0.8, 0.9, 0.95, 0.99]
y_ticks = np.log(-np.log(1 - np.array(p_ticks)))
y_tick_labels = [f"{int(p*100)}%" for p in p_ticks]

# 绘图
plt.figure(figsize=(8, 6))
plt.scatter(x_plot, y_plot, label='数据点')
plt.plot(x_plot, slope*x_plot + intercept, 'r--', label=f'拟合直线 (k={fit_shape:.2f}, λ={fit_scale:.2f})')

# 应用自定义y轴刻度
plt.yticks(y_ticks, y_tick_labels)
plt.ylabel('累积失效概率')
plt.xlabel('ln(寿命)')
plt.title('威布尔概率图')
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend()
plt.show()

解决y轴拥挤问题的核心逻辑

威布尔概率图的y轴基于ln(-ln(1-p))变换,原始均匀分位数在变换后会在低概率区(p接近0)密集。通过手动指定0.01、0.05、0.1这类间隔更大的分位数作为刻度点,可直接拉开低数值区域的间距,匹配Matlab的显示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:43:40