matplotlib barplot不使用对数刻度

时间:2018-05-15 18:08:57

标签: python matplotlib

我试图以对数标度在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()

以下是数字: Figure1

Figure2

enter image description here

1 个答案:

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

enter image description here