python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 准备数据
data = {
'Hz': [5, 5.0963, 5.1945, 5.2946, 5.3967, 5.5006, 5.6066, 5.7147, 5.8248, 5.937, 6.0514, 6.168, 6.2869, 6.408, 6.5315, 6.6573, 6.7856, 6.9164, 7.0496, 7.1855, 7.3239, 7.4651, 7.6089, 7.7555, 7.905, 8.0573, 8.2125, 8.3708, 8.5321, 8.6965, 8.864, 9.0348, 9.2089, 9.3864, 9.5672, 9.7516, 9.9395, 10.131, 10.326, 10.525, 10.728, 10.935, 11.145, 11.36, 11.579, 11.802, 12.03, 12.261, 12.498, 12.739, 12.984, 13.234, 13.489, 13.749, 14.014, 14.284, 14.559, 14.84, 15.126, 15.417, 15.714, 16.017, 16.326, 16.64, 16.961, 17.288, 17.621, 17.96, 18.306, 18.659, 19.019, 19.385, 19.759, 20.139, 20.527, 20.923, 21.326, 21.737, 22.156, 22.583, 23.018, 23.462, 23.914, 24.374, 24.844, 25.323, 25.811, 26.308, 26.815, 27.332, 27.858, 28.395, 28.942, 29.5, 30.068, 30.648, 31.238, 31.84, 32.454, 33.079, 33.716, 34.366, 35.028, 35.703, 36.391, 37.092, 37.807, 38.536, 39.278, 40.035, 40.806, 41.593, 42.394, 43.211, 44.044, 44.892, 45.757, 46.639, 47.538, 48.454, 49.387, 50.339, 51.309, 52.298, 53.305, 54.332, 55.379, 56.446, 57.534, 58.643, 59.773, 60.924, 62.098, 63.295, 64.515, 65.758, 67.025, 68.316, 69.633, 70.974, 72.342, 73.736, 75.157, 76.605, 78.081, 79.585, 81.119, 82.682, 84.275, 85.899, 87.554, 89.241, 90.961, 92.713, 94.5, 96.321, 98.177, 100.07, 102, 103.96, 105.97, 108.01, 110.09, 112.21, 114.37, 116.58, 118.82, 121.11, 123.45, 125.82, 128.25, 130.72, 133.24, 135.81, 138.42, 141.09, 143.81, 146.58, 149.4, 152.28, 155.22, 158.21, 161.26, 164.36, 167.53, 170.76, 174.05, 177.4, 180.82, 184.31, 187.86, 191.48, 195.17, 198.93, 202.76, 206.67, 210.65, 214.71, 218.84, 223.06, 227.36, 231.74, 236.21, 240.76, 245.4, 250.12, 254.94, 259.86, 264.86, 269.97, 275.17, 280.47, 285.88, 291.38, 297, 302.72, 308.55, 314.5, 320.56, 326.74, 333.03, 339.45, 345.99, 352.66, 359.45, 366.38, 373.44, 380.63, 387.97, 395.44, 403.06, 410.83, 418.75, 426.82, 435.04, 443.42, 451.97, 460.68, 469.55, 478.6, 487.82, 497.22, 506.8, 516.57, 526.52, 536.67, 547.01, 557.55, 568.29, 579.24, 590.4, 601.78, 613.37, 625.19, 637.24, 649.52, 662.03, 674.79, 687.79, 701.05, 714.55, 728.32, 742.36, 756.66, 771.24, 786.1, 801.25, 816.69, 832.42, 848.46, 864.81, 881.48, 898.46, 915.77, 933.42, 951.4, 969.74, 988.42, 1007.5, 1026.9, 1046.7, 1066.8, 1087.4, 1108.3, 1129.7, 1151.5, 1173.7, 1196.3, 1219.3, 1242.8, 1266.8, 1291.2, 1316.1, 1341.4, 1367.3, 1393.6, 1420.5, 1447.8, 1475.7, 1504.2, 2009.8],
'幅频': [-26.699, -26.466, -26.518, -26.642, -26.372, -26.328, -26.55, -26.673, -26.699, -27.03, -26.367, -26.526, -26.421, -26.528, -26.387, -26.39, -26.598, -26.436, -27.075, -26.428, -26.426, -26.576, -26.505, -26.291, -26.677, -26.713, -27.15, -26.906, -26.693, -26.751, -26.804, -26.423, -26.234, -26.589, -26.639, -26.456, -26.514, -26.424, -26.476, -26.555, -26.654, -26.561, -26.564, -26.533, -26.548, -26.567, -26.576, -26.499, -26.557, -26.578, -26.563, -26.554, -26.543, -26.495, -26.626, -26.61, -26.634, -26.563, -26.588, -26.581, -26.544, -26.56, -26.576, -26.507, -26.632, -26.61, -26.594, -26.582, -26.477, -26.487, -26.585, -26.647, -26.638, -26.638, -26.592, -26.606, -26.74, -26.549, -26.63, -26.713, -26.618, -26.695, -26.667, -26.57, -26.457, -26.564, -26.71, -26.499, -26.426, -26.618, -26.576, -26.681, -26.664, -26.697, -26.638, -26.768, -26.703, -26.775, -26.696, -26.725, -26.725, -26.741, -26.661, -26.776, -26.748, -26.851, -26.767, -26.739, -26.779, -26.725, -26.693, -26.837, -26.823, -26.803, -26.836, -26.816, -26.889, -26.796, -26.811, -26.804, -26.92, -26.996, -26.808, -26.862, -26.816, -26.897, -26.847, -26.911, -26.903, -26.939, -26.939, -26.951, -26.91, -26.868, -26.932, -26.929, -26.925, -26.957, -26.991, -27.024, -27.032, -27.029, -26.974, -26.998, -27.004, -27.022, -27.042, -27.085, -27.15, -27.124, -27.106, -27.034, -27.055, -27.101, -27.097, -27.137, -27.244, -27.193, -27.18, -27.14, -27.176, -27.19, -27.198, -27.171, -27.212, -27.275, -27.385, -27.492, -27.222, -27.263, -27.306, -27.332, -27.363, -27.367, -27.332, -27.328, -27.356, -27.342, -27.39, -27.412, -27.471, -27.456, -27.44, -27.447, -27.435, -27.443, -27.465, -27.479, -27.493, -27.522, -27.573, -27.586, -27.564, -27.553, -27.544, -27.578, -27.604, -27.627, -27.656, -27.7, -27.689, -27.683, -27.693, -27.706, -27.698, -27.751, -27.709, -27.846, -27.826, -27.862, -27.874, -27.869, -27.861, -28.228, -27.76, -27.747, -27.776, -27.822, -28.051, -28.039, -28.029, -28.161, -28.016, -28.001, -28.048, -28.054, -28.092, -28.113, -28.161, -28.16, -28.164, -28.238, -28.272, -28.326, -28.329, -28.345, -28.409, -28.317, -28.545, -28.513, -28.594, -28.635, -28.644, -28.643, -28.665, -28.706, -28.761, -28.837, -28.943, -28.978, -29.022, -29.069, -29.142, -29.177, -29.355, -29.376, -29.557, -29.605, -29.612, -29.64, -29.65, -29.65, -29.78, -29.683, -30.009, -29.83, -29.768, -29.572, -29.411, -29.757, -28.21, -28.814, -29.5, -29.285, -28.559, -27.451, -26.336, -24.179, -23.811, -20.998, -24.294, -30.01, -35.302, -42.024, -52.804, -45.128, -41.333, -31.765, -41.105, -54.433, -53.06, -49.676, -47.451, -46.007, -45.31, -44.424, -44.977, -43.942, -43.719, -42.944, -43.366],
'相频': [177.86, 174.96, 177.63, 177.28, 177.13, 178.23, 176.31, 176.88, 175.25, 178.95, 175.28, 176.19, 177.13, 176.11, 177.45, 174.23, 176.53, 176.51, 175.2, 176.06, 176.41, 176.86, 176.17, 176.95, 176.75, 176.4, 178.81, 179.89, 178.58, 174.05, 176.82, 178.65, 176.25, 173.72, 175.53, 175.82, 175.36, 175.26, 175.56, 175.8, 174.87, 175.08, 174.9, 175.76, 175.27, 175.83, 175.05, 174.98, 175.27, 175.61, 175.06, 174.75, 174.52, 174.51, 174.57, 174.67, 174.05, 174.1, 174.13, 174.03, 174.19, 173.86, 173.78, 173.62, 173.96, 174.02, 173.69, 173.73, 173.7, 173.82, 173.45, 172.98, 172.88, 172.92, 172.85, 172.65, 172.63, 173.16, 172.65, 171.46, 172.5, 172.38, 171.96, 171.8, 171.44, 175.14, 172.22, 171.2, 170.67, 172.26, 170.7, 171.52, 171.24, 171.36, 169.97, 171.44, 171.59, 170.75, 170.43, 170.2, 170.3, 170.54, 170.14, 169.87, 170.01, 169.43, 169.63, 169.37, 169.32, 168.98, 169.09, 168.86, 169.42, 168.11, 168.57, 167.99, 168.68, 167.81, 167.52, 168.21, 167.45, 166.76, 167.68, 166.41, 166.57, 166.47, 166.44, 166.28, 166.5, 165.9, 165.97, 165.45, 165.99, 165.07, 165.02, 164.84, 164.35, 164.13, 164.08, 164.14, 163.75, 163.52, 163.52, 163.02, 162.83, 162.8, 162.39, 162.23, 162.19, 161.66, 161.47, 161.5, 161, 161.29, 160.64, 160.37, 160.05, 159.74, 159.54, 159.37, 159, 158.69, 158.49, 158.38, 157.51, 157.6, 155.49, 157.34, 156.4, 156.43, 156.12, 155.31, 155.23, 154.93, 154.69, 154.34, 153.95, 153.26, 153.33, 152.76, 152.22, 152.04, 151.82, 151.39, 150.99, 150.61, 150.22, 149.78, 149.2, 148.91, 148.45, 148.03, 147.59, 147.11, 146.6, 146.13, 145.66, 145.21, 144.69, 144.03, 143.65, 143.16, 142.69, 142.15, 141.57, 140.93, 139.86, 139.51, 139.22, 138.73, 138.18, 137.14, 135.66, 136.23, 135.39, 134.3, 133.52, 132.4, 131.81, 131.79, 130.98, 130.56, 130.5, 129.01, 127.96, 127.4, 126.49, 125.7, 124.95, 124.07, 123.27, 122.24, 121.36, 120.42, 119.51, 118.45, 117.49, 116.84, 115.33, 114.66, 113.18, 112.28, 111.39, 110.13, 109.26, 108.03, 106.85, 105.66, 104.3, 103.54, 102.44, 101.17, 99.691, 99.078, 97.304, 95.897, 94.747, 94.027, 92.865, 91.263, 89.474, 88.932, 87.172, 86.255, 84.51, 84.684, 85.922, 80.062, 76.298, 76.044, 78.6, 65.757, 69.108, 70.249, 70.299, 67.181, 62.195, 49.54, 40.908, -10.785, -58.112, -84.241, -88.112, -90.5, -23.441, 62.887, 14.116, -36.891, -68.936, -43.657, 24.628, 39.437, 46.325, 48.714, 48.599, 47.587, 47.801, 47.594, 49.528, 47.283, -170.38]
}
df = pd.DataFrame(data)
# 创建图形
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))
# 绘制幅频曲线
ax1.semilogx(df['Hz'], df['幅频'], 'b-', linewidth=1.5, label='幅值')
ax1.set_ylabel('幅值 (dB)', color='b')
ax1.set_ylim(-30, 100)
ax1.set_yticks(range(-30, 101, 10))
ax1.grid(True, which="both", ls="-", alpha=0.3)
ax1.set_title('X方向频率响应特性', fontsize=14, pad=20)
# 绘制相频曲线
ax2.semilogx(df['Hz'], df['相频'], 'r-', linewidth=1.5, label='相位')
ax2.set_xlabel('频率 (Hz)')
ax2.set_ylabel('相位 (度)', color='r')
ax2.set_ylim(-180, 180)
ax2.set_yticks([-180, -120, -60, 0, 60, 120, 180])
ax2.grid(True, which="both", ls="-", alpha=0.3)
# 设置x轴范围和对数刻度
for ax in [ax1, ax2]:
ax.set_xlim(1, 10000)
ax.set_xscale('log')
ax.set_xticks([1, 10, 100, 1000, 10000])
ax.set_xticklabels(['1', '10', '100', '1000', '10000'])
plt.tight_layout()
plt.show()
生成图片