3

我想在频率上绘制一些图。我想要一个带有上标符号的 x 轴,就像这里一样。此外,我需要带有垂直注释的垂直线,将千赫兹和兆赫兹分开。

import numpy as np
import matplotlib.pyplot as plt
band = np.linspace(0,10**12,100)
y = band

plt.plot(band,y)
plt.xlabel('Frequencies')

plt.vlines(10**3, min(y), max(y),colors = 'black', label = 'kilo Hz')
plt.vlines(10**6, min(y), max(y),colors = 'black', label = 'mega Hz')
plt.legend()
plt.show()

我尝试使用ticker,但不知道如何设置它。我尝试按照一些示例进行操作,但遇到了错误,例如AttributeError: 'Figure' object has no attribute 'ticklabel_format' 已经在上面花费了很多时间并且不知道如何继续前进。

一般来说,我需要以类似的方式格式化 x 轴,而不是如果plt.xscale('log')但我想保持线性比例。

4

2 回答 2

5

您可以将刻度线定义为字符串并分配它们:

mport numpy as np
import matplotlib.pyplot as plt
band = np.linspace(0,10**12,100)
y = band

plt.plot(band,y)
plt.xlabel("Frequencies")

plt.vlines(10**3, min(y), max(y),colors = 'black', label = 'kilo Hz')
plt.vlines(10**6, min(y), max(y),colors = 'black', label = 'mega Hz')

string_labels = []
for i in range(0,len(y),10):
    string_labels.append(r"$10^{%02d}$" % (i/10.0))

plt.xticks(np.linspace(0,10**12,10),string_labels)

plt.legend()
plt.show()
于 2013-05-13T20:46:41.683 回答
0

我只是在黑暗中拍摄,但看起来 xlabel 有多种选择:

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xlabel

当我去:

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.text

我注意到有一个垂直对齐选项。也许这就是你需要的?

于 2013-05-13T19:04:00.887 回答