我试图以对数标度在Matplotlib中做一个条形图。如果我手动执行此操作(下面的图3),我会得到正确的答案,但如果我使用matplotlib的set_yscale('log')
或使用条形图的log属性,我会得到错误的情节。正如你在图1和图2中看到的那样,情节是错误的,因为log10(y2)=([5.7363965,5.77815125])
以下是MWE:
from __future__ import division
import numpy as np
from matplotlib import pyplot as plt
ind = np.array(['US', 'EU'])
y2 = [545000, 600000]
fig = plt.figure(1)
ax = fig.add_subplot(1, 1, 1)
plt.bar(ind, y2)
ax.set_yscale('log')
plt.title('example 1')
#plt.savefig('../../Desktop/ex1.jpg')
fig = plt.figure(2)
ax2 = fig.add_subplot(1, 1, 1)
plt.bar(ind, y2, log=True)
plt.title('example2')
#plt.savefig('../../Desktop/ex2.jpg')
fig2 = plt.figure(3)
ax1 = fig2.add_subplot(1, 1, 1)
plt.bar(ind, np.log10(y2))
plt.title('example 3')
#plt.savefig('../../Desktop/ex3.jpg')
plt.show()
答案 0 :(得分:1)
如果您使用print(plt.gca().get_ylim())
在第一个数字中查看y轴限制,我会得到:
(542386.3669524404, 602891.2596703834)
因此,在对数刻度中只能看到1个主刻度线,如问题中图1和图2中的情况。要获得与第三个相似的图形,您需要设置y轴的限制:
ind = np.array(['US', 'EU'])
y2 = [545000, 600000]
fig = plt.figure(1)
ax = fig.add_subplot(1, 1, 1)
plt.bar(ind, y2)
plt.ylim(1,1000000) # set y axis limits
ax.set_yscale('log')
plt.title('example 1')
plt.show()