У меня есть существующий сюжет, созданный с помощью таких пандов:
df['myvar'].plot(kind='bar')
Ось y имеет формат с плавающей запятой, и я хочу изменить ось y на проценты. Во всех найденных мною решениях используется синтаксис ax.xyz, и я могу разместить код только под строкой выше, которая создает график (я не могу добавить ax = ax в строку выше).
Как отформатировать ось Y в процентах, не меняя строку выше?
Вот решение, которое я нашел, но требует, чтобы я переопределил сюжет :
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as mtick
data = [8,12,15,17,18,18.5]
perc = np.linspace(0,100,len(data))
fig = plt.figure(1, (7,4))
ax = fig.add_subplot(1,1,1)
ax.plot(perc, data)
fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
xticks = mtick.FormatStrFormatter(fmt)
ax.xaxis.set_major_formatter(xticks)
plt.show()
Ссылка на приведенное выше решение: Pyplot: использование процента по оси x
python
pandas
matplotlib
plot
Крис
источник
источник
Ответы:
Это произошло с опозданием на несколько месяцев, но я создал PR # 6251 с matplotlib, чтобы добавить новый
PercentFormatter
класс. С этим классом вам понадобится всего одна строка для переформатирования вашей оси (две, если вы считаете импортmatplotlib.ticker
):PercentFormatter()
принимает три аргумента,xmax
,decimals
,symbol
.xmax
позволяет установить значение, соответствующее 100% на оси. Это хорошо, если у вас есть данные от 0,0 до 1,0 и вы хотите отображать их от 0% до 100%. Просто сделайPercentFormatter(1.0)
.Два других параметра позволяют вам установить количество цифр после десятичной точки и символа. По умолчанию они равны
None
и'%'
соответственно.decimals=None
автоматически установит количество десятичных знаков в зависимости от того, сколько осей вы показываете.Обновить
PercentFormatter
был введен непосредственно в Matplotlib в версии 2.1.0.источник
from matplotlib.ticker import mtick
и предположил, чтоmtick
«модуль» был удален.График pandas dataframe вернет
ax
для вас, а затем вы можете начать манипулировать осями, как хотите.источник
matplotlib.ticker
форматеры функций!Решение Jianxun сработало за меня, но сломало индикатор значения y в нижнем левом углу окна.
В итоге я использовал
FuncFormatter
вместо этого (а также удалил ненужные конечные нули, как предлагается здесь ):Вообще я бы рекомендовал использовать
FuncFormatter
для форматирования этикеток: он надежный и универсальный.источник
ax.yaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format))
. AKA нет необходимости в лямбде, пусть формат сделает всю работу.'{0:.0%}'.format
создает функцию форматирования .0
Перед двоеточием говорит форматировщику заменить фигурные скобки и его содержимое с первым аргументом , переданной функцией. Часть после двоеточия,.0%
сообщает программе форматирования, как визуализировать значение..0
Указывает 0 знаков после запятой и%
определяет , рендеринга в процентах.Для тех, кто ищет быстрый однострочник:
Или, если вы используете Latex в качестве средства форматирования текста оси, вам нужно добавить одну обратную косую черту '\'
источник
Предлагаю альтернативный метод с использованием
seaborn
Рабочий код:
источник
Я опаздываю в игру, но просто понимаю:
ax
можно заменить наplt.gca()
для тех, кто не использует топоры и только второстепенные сюжеты.Повторяя ответ @Mad Physicist, используя пакет,
PercentFormatter
он будет:источник