如何在matplotlib中更改轴标签的格式

时间:2015-06-04 16:08:17

标签: matplotlib axis-labels

如果我绘制一个对数比例图,matplotlib给了我漂亮的条目10 5 ,10 6 ,...

为了便于阅读,我更喜欢表格1e5,1e6,...

我可以直接将轴属性设置为这样吗?

我相当丑陋的黑客会是:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 40, 100);
y = np.linspace(1, 5, 100);

# Actually plot the exponential values
plt.plot(x, 10**y)
ax = plt.gca()
ax.set_yscale('log')

# Rewrite the y labels
y_labels = ax.get_yticks()
ax.set_yticklabels(['1e%i' % np.round(np.log(y)/np.log(10)) for y in y_labels])

plt.show()

enter image description here

但肯定有更好的方法。

1 个答案:

答案 0 :(得分:8)

您使用ticker.FormatStrFormatter('%0.0e')。这使用字符串格式%0.0e格式化每个数字,表示使用指数表示法的浮点数:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = np.linspace(1, 40, 100)
y = np.linspace(1, 5, 100)

# Actually plot the exponential values
fig, ax = plt.subplots()
ax.plot(x, 10**y)
ax.set_yscale('log')

# Rewrite the y labels
y_labels = ax.get_yticks()
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%0.0e'))

plt.show()

产量

enter image description here