Могу ли я включить научную нотацию в гистограмму matplotlib? - PullRequest
0 голосов
/ 13 января 2019

У меня есть гистограмма, которая выглядит так, как я хочу, за исключением научной нотации по осям Y.

Некоторые другие решения, включающие использование

ax.yaxis.set_major_formatter(tick)

, который не работал. Кроме того, я попытался проверить, была ли это проблема смещения, но она должна была показать знак «+», чего в данном случае нет.

Всякий раз, когда я использую:

plt.ticklabel_format(style='plain')

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "C:\Python\lib\site-packages\matplotlib\axes\_base.py", line 2831, in ticklabel_format
    self.xaxis.major.formatter.set_scientific(sb)
AttributeError: 'FixedFormatter' object has no attribute 'set_scientific'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Python/Projects/Kaggle 1.py", line 13, in <module>
    plt.ticklabel_format(style='plain')
  File "C:\Python\lib\site-packages\matplotlib\pyplot.py", line 2982, in ticklabel_format
    useMathText=useMathText)
  File "C:\Python\lib\site-packages\matplotlib\axes\_base.py", line 2856, in ticklabel_format
    "This method only works with the ScalarFormatter.")
AttributeError: This method only works with the ScalarFormatter.

Я изучал этот ScalarFormatter, но я не мог понять, почему он не работает. Я пытался явно включить его в код, но он не работает.

Код, который я использую:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv("100 Sales Records.csv")
df_new = df.groupby(['Region']).sum().sort_values("Total Profit", ascending=False)
regions = ('Sub-Saharan Africa', 'Europe', 'Asia', 'Middle East and North Africa', 'Australia and Oceania', 'Central America and the Caribbean', 'North America')
profit = df_new['Total Profit']
y_pos = np.arange(len(profit))

plt.bar(y_pos, profit)
plt.xticks(y_pos, regions)
plt.ticklabel_format(style='plain')
plt.title('Sum of Sales')

plt.show()

График в настоящее время выглядит следующим образом:

enter image description here

1 Ответ

0 голосов
/ 13 января 2019

Вы можете использовать FuncFormatter из matplotlib.ticker для обновления тиков по своему желанию на вашем текущем графике. В моем примере ниже тики обновляются с использованием пользовательского scientific_formatter, который я определил для обновления тиков в научной нотации с двумя точными цифрами - %2E.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

profit = pd.Series(np.random.randint(1e2, size=5))
ax = profit.plot(kind="bar")

def scientific(x, pos):
    # x:  tick value - ie. what you currently see in yticks
    # pos: a position - ie. the index of the tick (from 0 to 9 in this example)
    return '%.2E' % x

scientific_formatter = FuncFormatter(scientific)
ax.yaxis.set_major_formatter(scientific_formatter)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...