barplot matplotlib не работает с логарифмической шкалой - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь сделать барплот в Matplotlib в логарифмическом масштабе. Если я сделаю это вручную (рисунок 3 ниже), я получу правильный ответ, но если я использую matplotlib set_yscale('log') или использую атрибут журнала barplot, я получу неправильный график. Итак, как вы можете видеть на рисунках 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 голосов
/ 15 мая 2018

Если вы посмотрите на пределы оси Y на первом рисунке, используя print(plt.gca().get_ylim()), я получу:

(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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...