2014-10-10 3 views
7

У меня есть линейная диаграмма на основе простого списка чисел. По умолчанию ось x представляет собой просто прирост по 1 для каждого построенного значения. Я хотел бы получить процент, но не могу понять, как это сделать. Таким образом, вместо того, чтобы ось Х от 0 до 5, она будет идти от 0% до 100% (но сохраняя достаточно разнесенные засечек. Код ниже. Спасибо!Pyplot: использование процента по оси x

from matplotlib import pyplot as plt 
from mpl_toolkits.axes_grid.axislines import Subplot 

data=[8,12,15,17,18,18.5] 
fig=plt.figure(1,(7,4)) 
ax=Subplot(fig,111) 
fig.add_subplot(ax) 
plt.plot(data) 

ответ

18

Код ниже даст вам упрощенный ось x, основанная на процентах, предполагает, что каждое из ваших значений равно равным 0% и 100%.

Он создает массив perc, который имеет равномерно распределенные проценты, которые можно использовать для построения. корректирует форматирование по оси x, поэтому он включает знак процента, используя matplotlib.ticker.FormatStrFormatter. К сожалению, это использует форматирование в стиле старого стиля, в отличие от нового стиля, документы старого стиля можно найти here.

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

Example plot

+0

Ничего плохого в старом стиле форматирования. Он по-прежнему более совместим с этими двумя (см., Например, модуль регистрации). –

+0

Какой формат будет, если исходные значения уже равны 0,5? Я хочу сделать это на 50%. –

+1

Другим возможным решением было бы использовать 'mtick.FuncFormatter (" {:. 0%} ". Format)', который использует новые стили форматирования стиля, которые я считаю более читабельными и гибкими. –

2

Это несколько месяцев поздно, но я создал PR#6251 с Matplotlib, чтобы добавить новый PercentFormatter класс. С помощью этого класса можно сделать следующим образом установить ось:

import matplotlib.ticker as mtick 

# Actual plotting code omitted 

ax.xaxis.set_major_formatter(mtick.PercentFormatter(5.0)) 

Это будет отображать значение от 0 до 5 по шкале от 0% до 100%. Форматирование аналогично по идее тому, что предлагает @Ffisegydd, за исключением того, что он может принимать во внимание любые произвольные существующие тики.

PercentFormatter() принимает три аргумента, max, decimals и symbol. max позволяет установить значение, соответствующее 100% на оси (в вашем примере 5).

Остальные два параметра позволяют вам установить количество цифр после десятичной точки и символа. Они по умолчанию равны None и '%', соответственно. decimals=None будет автоматически устанавливать число десятичных точек в зависимости от того, сколько осей вы показываете.

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

Смежные вопросы