如何在一定范围内找到最大值的x值?
How to find x-value of maximum in a certain range?
如何确定特定范围内数据集最大值的x值?
对于上下文,这些记录数据集如下所示:
value['Wavelength']
:
PixelNo
0 1167.467506
1 1167.219570
2 1166.971628
3 1166.723680
4 1166.475725
...
3635 233.904486
3636 233.641110
3637 233.377731
3638 233.114350
3639 232.850967
Name: Wavelength, Length: 3640, dtype: float64
value['Calib_1']
:
PixelNo
0 1.000000e+00
1 5.500000e+01
2 3.500000e+01
3 1.000000e-07
4 4.600000e+01
...
3635 4.000000e+01
3636 7.400000e+01
3637 1.000000e-07
3638 3.000000e+00
3639 1.600000e+01
Name: Calib_1, Length: 3640, dtype: float64
这是所有数据集对应图的示例。
您可以使用argmax
方法,其中returns最大值的索引。
假设您有这样的曲线:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
value = pd.DataFrame({'Wavelength': np.linspace(250, 600, 10000)})
value['Calib_1'] = (np.sin(2*np.pi/20*value['Wavelength'])*np.exp(-(value['Wavelength']-455)**2/20/(600-250)))**2
fig, ax = plt.subplots()
ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')
plt.show()
上面的曲线被设计成在455
.
有最大值
您可以找到最大值的索引:
value['Calib_1'].argmax()
# 5857
并用它通过loc
方法得到对应的x轴值:
value.loc[value['Calib_1'].argmax(), 'Wavelength']
# 455.015501550155
如您所见,它 returns 的值大约接近 455
的精确值。错误将通过 numpy.linspace
.
解决到 x 轴离散化
您可以在上面的图上绘制最大值:
id_max = value['Calib_1'].argmax()
x_max = value.loc[id_max, 'Wavelength']
y_max = value.loc[id_max, 'Calib_1']
fig, ax = plt.subplots()
ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.plot(x_max, y_max, marker = 'o', color = 'red')
ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')
plt.show()
如果你只需要一个特定范围的最大值,比如说[500, 550]
,那么首先你必须过滤数据帧,然后计算最大值的索引:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
value = pd.DataFrame({'Wavelength': np.linspace(250, 600, 10000)})
value['Calib_1'] = (np.sin(2*np.pi/20*value['Wavelength'])*np.exp(-(value['Wavelength']-455)**2/20/(600-250)))**2
value_filt = value[(value['Wavelength'] >= 500) & (value['Wavelength'] <= 550)].reset_index()
id_max = value_filt['Calib_1'].argmax()
x_max = value_filt.loc[id_max, 'Wavelength']
y_max = value_filt.loc[id_max, 'Calib_1']
fig, ax = plt.subplots()
ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.plot(x_max, y_max, marker = 'o', color = 'red')
ax.axvline(x = 500, color = 'black', linestyle = '--')
ax.axvline(x = 550, color = 'black', linestyle = '--')
ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')
plt.show()
如何确定特定范围内数据集最大值的x值?
对于上下文,这些记录数据集如下所示:
value['Wavelength']
:PixelNo 0 1167.467506 1 1167.219570 2 1166.971628 3 1166.723680 4 1166.475725 ... 3635 233.904486 3636 233.641110 3637 233.377731 3638 233.114350 3639 232.850967 Name: Wavelength, Length: 3640, dtype: float64
value['Calib_1']
:PixelNo 0 1.000000e+00 1 5.500000e+01 2 3.500000e+01 3 1.000000e-07 4 4.600000e+01 ... 3635 4.000000e+01 3636 7.400000e+01 3637 1.000000e-07 3638 3.000000e+00 3639 1.600000e+01 Name: Calib_1, Length: 3640, dtype: float64
这是所有数据集对应图的示例。
您可以使用argmax
方法,其中returns最大值的索引。
假设您有这样的曲线:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
value = pd.DataFrame({'Wavelength': np.linspace(250, 600, 10000)})
value['Calib_1'] = (np.sin(2*np.pi/20*value['Wavelength'])*np.exp(-(value['Wavelength']-455)**2/20/(600-250)))**2
fig, ax = plt.subplots()
ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')
plt.show()
上面的曲线被设计成在455
.
有最大值
您可以找到最大值的索引:
value['Calib_1'].argmax()
# 5857
并用它通过loc
方法得到对应的x轴值:
value.loc[value['Calib_1'].argmax(), 'Wavelength']
# 455.015501550155
如您所见,它 returns 的值大约接近 455
的精确值。错误将通过 numpy.linspace
.
解决到 x 轴离散化
您可以在上面的图上绘制最大值:
id_max = value['Calib_1'].argmax()
x_max = value.loc[id_max, 'Wavelength']
y_max = value.loc[id_max, 'Calib_1']
fig, ax = plt.subplots()
ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.plot(x_max, y_max, marker = 'o', color = 'red')
ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')
plt.show()
如果你只需要一个特定范围的最大值,比如说[500, 550]
,那么首先你必须过滤数据帧,然后计算最大值的索引:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
value = pd.DataFrame({'Wavelength': np.linspace(250, 600, 10000)})
value['Calib_1'] = (np.sin(2*np.pi/20*value['Wavelength'])*np.exp(-(value['Wavelength']-455)**2/20/(600-250)))**2
value_filt = value[(value['Wavelength'] >= 500) & (value['Wavelength'] <= 550)].reset_index()
id_max = value_filt['Calib_1'].argmax()
x_max = value_filt.loc[id_max, 'Wavelength']
y_max = value_filt.loc[id_max, 'Calib_1']
fig, ax = plt.subplots()
ax.plot(value['Wavelength'], value['Calib_1'], color = 'blue')
ax.plot(x_max, y_max, marker = 'o', color = 'red')
ax.axvline(x = 500, color = 'black', linestyle = '--')
ax.axvline(x = 550, color = 'black', linestyle = '--')
ax.set_xlabel('Wavelength')
ax.set_ylabel('Calib_1')
plt.show()