Вопрос

1. X-Ticklabels не работает

Я использую Matplotlib для генерации гистограммы из некоторых измерений:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as pyplot
...
fig = pyplot.figure()
ax = fig.add_subplot(1,1,1,)
n, bins, patches = ax.hist(measurements, bins=50, range=(graph_minimum, graph_maximum), histtype='bar')

ax.set_xticklabels([n], rotation='vertical')


for patch in patches:
    patch.set_facecolor('r')

pyplot.title='Foobar'
#pyplot.grid(True)
pyplot.xlabel('X-Axis')
pyplot.ylabel('Y-Axis')
pyplot.savefig(output_filename)

Полученный PNG выглядит хорошо, за исключением двух проблем:

  1. Название («Спам и Хэм») отсутствует в PNG. Метки о оси X и Y присутствуют (хотя я не включил их для образца ниже).
  2. Лесты X-Tick кажется полностью сломанными-вместо того, чтобы показывать вдоль нижней части под всеми стержнями, они отображаются в виде одной линии чисел внизу слева от нижней части графика, который отрезается. Кажется, это также отключает мой ярлык оси Y.

Histogram with broken xticklabels

2

NB: не Matplotlib Special.

Гистограмма имеет измерения времени вдоль оси X. Они варьируются от микросекундного диапазона до миллисекундного и второго диапазона. На данный момент график отображает метки оси X в качестве секунд в стандартной нотации.

Time in seconds along x-axis

Я хотел бы иметь дружеский формат, я бы предпочел, чтобы время было дано в миллисекундах/микросекундных значениях, с показывающими устройствами. Так что это означает, что я бы хотел что -нибудь для дружеского формата, значения времени, с осознанием префиксов SI.

На самом деле, это, вероятно, очень похоже на образец программы здесь:

http://diveintopython3.org/your-first-python-program.html

Я заметил, что есть некоторые библиотеки Python, которые справляются с единицами:

  1. http://juanreyero.com/open/magnitude/index.html
  2. http://home.scarlet.be/be052320/unum.html
  3. http://pypi.python.org/pypi/units/

Однако из того, что я прочитал, это не похоже на ни одного из вышеперечисленных префиксов Si или делает такой дружеский форматирование. Есть предложения/альтернативы?

Это было полезно?

Решение

1.1: Название («Спам и Хэм») отсутствует в PNG.

Вы написали

pyplot.title='Foobar'

Ты хочешь

pyplot.title("Spam and Ham")

pyplot.title = 'foobar' просто заменяет функцию заголовка строкой.

1.2: Лесты X-Tick кажется полностью сломанным

ISTM ax.set_xticklabels([n], rotation='vertical') Вероятно, не то, что вы хотите делать, потому что я не думаю, что это то, что вы думаете. Для измерений [1,2,3,4], мы получаем:

>>> n, bins, patches = ax.hist([1,2,3,4])
>>> n
array([1, 0, 0, 1, 0, 0, 1, 0, 0, 1])
>>> bins
array([ 1. ,  1.3,  1.6,  1.9,  2.2,  2.5,  2.8,  3.1,  3.4,  3.7,  4. ])
>>> patches
<a list of 10 Patch objects>

n - это массив, содержащий подсчет в бункерах, а не в локациях корзины; Это ось Y, а не x. Более того, это уже список, поэтому использование [n] не должно было быть необходимо в любом случае. Я не уверен, что вы хотите сделать, но вы можете либо сделать струнные этикетки из мусорных ведомств (если вы не хотите много цифр!), Либо, если вы хотите, чтобы этикетки Xtick были вертикальными, вы можете использовать

for label in ax.get_xticklabels():
    label.set_rotation('vertical')

Боюсь, я ничего не знаю о библиотеках единиц.

Другие советы

Чтобы добавить префиксы SI к меткам оси, которые вы хотите использовать Quantiphy. Анкет Фактически, в своей документации есть пример, который показывает, как сделать это точное: Matplotlib пример.

Я думаю, вы бы добавили что -то подобное в свой код:

from matplotlib.ticker import FuncFormatter
from quantiphy import Quantity

time_fmtr = FuncFormatter(lambda v, p: Quantity(v, 's').render(prec=2))
ax.xaxis.set_major_formatter(time_fmtr)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top