我正在尝试在python图上创建一个显示x和y坐标的数据标记,如果可能的话,最好自动生成。请记住,我是python的新手,并且没有使用matplotlib中的标记功能的任何经验。我有来自.csv文件的FFT图,我试图将其与理论计算进行比较,但我需要一种突出显示特定点并删除具有类似于MATLAB的坐标值的标记的方法。作为参考,我正在绘制一个幅度为1V的100kHz正弦波频率强度的FFT,所以我试图证明在50欧姆的环境中,100kHz的尖峰接近于3.98dBm的计算值。以下是我感兴趣的csv文件中的一些数据(第三列不感兴趣):
9.991250000000E+04 -8.399371E+01 0.000000E+00
9.992500000000E+04 -8.108232E+01 0.000000E+00
9.993750000000E+04 -7.181630E+01 0.000000E+00
9.995000000000E+04 -7.190387E+01 0.000000E+00
9.996250000000E+04 -7.961070E+01 0.000000E+00
9.997500000000E+04 -8.090104E+01 0.000000E+00
9.998750000000E+04 -1.479405E+01 0.000000E+00
1.000000000000E+05 3.740311E+00 0.000000E+00
1.000125000000E+05 -6.665535E-01 0.000000E+00
1.000250000000E+05 -7.868803E+01 0.000000E+00
1.000375000000E+05 -8.149953E+01 0.000000E+00
1.000500000000E+05 -7.948487E+01 0.000000E+00
1.000625000000E+05 -7.436191E+01 0.000000E+00
1.000750000000E+05 -8.068216E+01 0.000000E+00
1.000875000000E+05 -7.998886E+01 0.000000E+00
1.001000000000E+05 -8.316663E+01 0.000000E+00
以下是我提取数据的方法
Frequency = data[:,0]
Intensity = data[:,1]
title("Frequency Intensity")
xlabel("Frequency [Hz]")
ylabel("Intensity [dBm]")
plot(Frequency, Intensity)
grid();
编辑: 我希望我的情节看起来像这样,其中x表示频率,y表示强度,单位为dBm。我只想让我放置的标记在图上显示x,y坐标。
答案 0 :(得分:1)
从pd.Series
data
s = pd.DataFrame({
'Frequency [Hz]': data[:, 0],
'Intensity [dBm]': data[:, 1]
}).set_index('Frequency [Hz]')['Intensity [dBm]']
然后用annotate
ax = s.plot(title='Frequency Intensity')
ax.set_ylabel(s.name)
point = (s.index[7], s.values[7])
ax.annotate('Marker', xy=point, xytext=(0.1, 0.95), textcoords='axes fraction',
arrowprops=dict(facecolor='black', shrink=0.05),
)
答案 1 :(得分:0)
你可能想要这样的东西:
import numpy as np
import matplotlib.pyplot as plt
# assuming we are in Jupyter
%matplotlib inline
frequency = np.array(
[ 99912.5, 99925. , 99937.5, 99950. , 99962.5, 99975. ,
99987.5, 100000. , 100012.5, 100025. , 100037.5, 100050. ,
100062.5, 100075. , 100087.5, 100100. ])
intensity = np.array(
[-83.99371 , -81.08232 , -71.8163 , -71.90387 , -79.6107 ,
-80.90104 , -14.79405 , 3.740311 , -0.6665535, -78.68803 ,
-81.49953 , -79.48487 , -74.36191 , -80.68216 , -79.98886 ,
-83.16663 ])
plt.title("Frequency Intensity")
plt.xlabel("Frequency [Hz]")
plt.ylabel("Intensity [dBm]")
plt.plot(frequency, intensity)
x = frequency[7]
y = intensity[7]
plt.plot([x], [y], 'v', color='red', ms=10)
plt.text(x, y, "({:0.2f}, {:0.2f})".format(x, y))
plt.grid()