Python - Matplotlib:标准化 y 轴以显示标准偏差的倍数
Python - Matplotlib: normalizing y-axis to show multiples of standard deviation
我想重新归一化我的 y 轴,以 sigma(标准差)的倍数显示我的信号。例如,然后可以说在 50Hz 有一个 3 sigma 信号,而在 3Hz 有一个 0.5 sigma 信号。
我认为使用 plt.yticks()
可能是可行的方法:
import numpy as np
import matplotlib.pyplot as plt
X = range(0,50,2)
Y = range(0,50,2)
signal_sigma = np.std(Y)
plt.figure()
plt.plot(X, Y)
plt.yticks(np.arange(0, 25*signal_sigma, signal_sigma))
y_labels = [r"${} \sigma$".format(i) for i in range(0, 26)]
plt.ylabel(y_labels)
plt.show()
但这似乎还不太正确。我错过了什么?
更新:
这就是我想要做的:What does a 1-sigma, a 3-sigma or a 5-sigma detection mean? 概率 table 正下方的位。
您想设置 yticklabels,这不同于使用 plt.ylabel
:
设置轴标签
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = 42 * np.random.randn(1000)
signal_sigma = y.std()
num_sigma = 3
sigma_values = np.arange(-num_sigma, num_sigma+1)
yticks = signal_sigma * sigma_values
yticklabels = ['$'+str(k)+'\sigma$' if k != 0 else '$\mu$' for k in sigma_values]
plt.figure()
plt.plot(x, y)
plt.yticks(yticks, yticklabels)
plt.ylabel('the axis label')
我想重新归一化我的 y 轴,以 sigma(标准差)的倍数显示我的信号。例如,然后可以说在 50Hz 有一个 3 sigma 信号,而在 3Hz 有一个 0.5 sigma 信号。
我认为使用 plt.yticks()
可能是可行的方法:
import numpy as np
import matplotlib.pyplot as plt
X = range(0,50,2)
Y = range(0,50,2)
signal_sigma = np.std(Y)
plt.figure()
plt.plot(X, Y)
plt.yticks(np.arange(0, 25*signal_sigma, signal_sigma))
y_labels = [r"${} \sigma$".format(i) for i in range(0, 26)]
plt.ylabel(y_labels)
plt.show()
但这似乎还不太正确。我错过了什么?
更新:
这就是我想要做的:What does a 1-sigma, a 3-sigma or a 5-sigma detection mean? 概率 table 正下方的位。
您想设置 yticklabels,这不同于使用 plt.ylabel
:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = 42 * np.random.randn(1000)
signal_sigma = y.std()
num_sigma = 3
sigma_values = np.arange(-num_sigma, num_sigma+1)
yticks = signal_sigma * sigma_values
yticklabels = ['$'+str(k)+'\sigma$' if k != 0 else '$\mu$' for k in sigma_values]
plt.figure()
plt.plot(x, y)
plt.yticks(yticks, yticklabels)
plt.ylabel('the axis label')