![具有任意 y 轴刻度的威布尔图](https://linux22.com/image/257141/%E5%85%B7%E6%9C%89%E4%BB%BB%E6%84%8F%20y%20%E8%BD%B4%E5%88%BB%E5%BA%A6%E7%9A%84%E5%A8%81%E5%B8%83%E5%B0%94%E5%9B%BE.png)
我想在威布尔图中绘制一个函数。x 轴是对数,y 轴则与之相对log(-log(1-y))
(据我了解本网站)。y 轴看起来类似于对数刻度,但在 10 处的中心处反转(以 % 为单位从 0.1 到 99.9)。
对于任何类型的函数,此图中的结果线应为线性
f(x) = 1-exp(-x^b)
我从对数轴开始,但这显然是错误的
\begin{tikzpicture}
\begin{loglogaxis}[scale only axis,
every axis plot/.append style={line width=2.0pt},
domain=0.1:20,
xmin=0,xmax = 20.0,
ymin=0.1,ymax = 99.9,
grid=major,
xtick={1,2,3,4,5,10,20,30,40,50,100,200,300},
ytick={0.1,0.2,0.3,0.4,0.5,1,2,3,4,5,10,20,30,40,50,60,70,80,90,99,99.9},
%
xlabel=Lebensdauer $t$,
ylabel=Ausfallhäufigkeitssumme $R(t)$,
]
%
\addplot[domain=0.01:100] gnuplot{ 1-exp(-x**2)};
\end{loglogaxis}
\end{tikzpicture}
然而,我已经看到刻度都写成了 10 的幂,但我希望它们在所有情况下都是线性的。如何实现呢?
编辑:
我尝试使用以下方法修改轴:
xmode=log,
y coord trafo/.code=\pgfmathparse{(ln(1-ln(1-#1/100))+4.6001)/6.66*100}
但 y 轴刻度显示的不是数字,而是 0-100 刻度上的位置,这是错误的。更重要的是:tex 计算出的数字是错误的。对于 x= 0.2,它应该是 7.84,但 tex 打印出 69.1。
真实的 y 值显示在具有正确计算值的 matlab 图中:
答案1
这是链接中的示例,用 PGFPlots 实现:
\documentclass[border=2pt]{standalone}
\usepackage{pgfplots,pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[scale only axis,
only marks,
xmin=10,xmax = 1000,
ymin=0.001, ymax=0.999,
grid=major,
xtick={10, 20, 50, 100, 200, 500, 1000},
ytick={0.001,0.05,0.4,0.99},
yticklabels={0.1,5,40,99},
xmode=log,
log ticks with fixed point,
y coord trafo/.code=\pgfmathparse{ln(-ln(1-#1)))},
y coord inv trafo/.code=\pgfmathparse{exp(-exp(-#1-1))}
]
%
\addplot [domain=10:1000, sharp plot] {1-exp(-(x/820)^1.96)};
\addplot [mark=o, mark size=1.5, black] table {
96 0.02
147 0.04
202 0.0604
232 0.0813
277 0.1022
278 0.1231
325 0.1439
346 0.1648
354 0.1857
367 0.2066
414 0.228
440 0.2501
471 0.2721
525 0.2942
541 0.3163
542 0.3383
574 0.3604
608 0.3824
631 0.4045
643 0.4265
661 0.4504
669 0.4743
706 0.4982
720 0.5221
722 0.546
738 0.5712
747 0.598
770 0.6248
802 0.6537
841 0.6825
850 0.7114
884 0.7403
893 0.7691
901 0.798
};
\end{axis}
\end{tikzpicture}
\end{document}