matplotlib的刻度轴符号与上标

3 人关注

我想制作一些关于频率的图表。我想在X轴上用上标符号,比如说 here . 此外,我还需要有垂直注释的竖线,将公斤级和兆级赫兹分开。

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()

I tried use ticker但不知道如何设置它。我试图按照some例子,但得到了类似AttributeError: 'Figure' object has no attribute 'ticklabel_format'的错误。 已经花了不少时间,不知道该如何继续前进。

一般来说,我需要X轴的格式化,比方说plt.xscale('log'),但我想保持线性比例。

5 个评论
你能展示一下使用的代码吗? doesn't work?
另外,在垂直线上使用 axvline 而不是 vlines
我试着用不同的配置来使用 matplotlib.ticker.Formatter ,而且我试了很多已经不存在的线。此外,对于 set_major_formatter 来说我得到了类似 object has no attribute 的错误
sodd
只是一个想法;如果你要有一个X轴跨度值(至少)从10 3 to 10 6,有一个 线型 规模,10之间的距离 5和10 6将是10之间距离的10倍 4和10 5,和100倍(!)10之间的距离。 3和10 4.在你所链接的例子中,X轴 is 事实上是一个对数尺度。
但你在什么对象上尝试 set_major_formatter ? 那是 axis (不是 axes )对象的一种方法。 yaxis = ax.get_yaxis()
python
matplotlib
tomasz74
tomasz74
发布于 2013-05-14
2 个回答
Schorsch
Schorsch
发布于 2013-05-14
已采纳
0 人赞同

你可以将刻度线定义为字符串,并将其赋值。

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()
    
谢谢。我真的很喜欢你的解决方案。它提供了我所需要的东西。我想它可以作为matplotlib层面的某种格式化来完成,但这也很好。
Christopher Spears
Christopher Spears
发布于 2013-05-14
0 人赞同

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

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