2016-04-18 2 views
0

У меня есть список (time), заполненный строками timestamp (H: m: s) и другой (number) с цифрами. Длина обоих списков одинакова и около 350 000 элементов.Matplotlib xticks MemoryError

Plotting не проблема, все идет хорошо, но проблема возникает при добавлении строки

plt.xticks(range(len(number)), time, rotation=90, size='small') 

и мой скрипт не говоря

Traceback (most recent call last): 
    File "G:\Documents\work\program.py", line 114, in <module> 
    plt.xticks(range(len(number)), time, rotation=90, size='small') 
    File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 1674, in xticks 
    locs = ax.set_xticks(args[0]) 
    File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 2850, in set_xticks 
    ret = self.xaxis.set_ticks(ticks, minor=minor) 
    File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 1606, in set_ticks 
    return self.get_major_ticks(len(ticks)) 
    File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 1294, in get_major_ticks 
    tick = self._get_tick(major=True) 
    File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 1675, in _get_tick 
    return XTick(self.axes, 0, '', major=major, **tick_kw) 
    File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 154, in __init__ 
    self.label1 = self._get_text1() 
    File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 372, in _get_text1 
    horizontalalignment=horiz, 
MemoryError 

Является ли это на самом деле слишком много для Matplotlib? Или я делаю что-то неправильно? (кроме того, используя Windows)

ответ

0

350 000 клещей создавали бы только одну широкую линию, я думаю. Написание 350 000 строк рядом друг с другом также создаст довольно трудные для чтения метки.

Попробуйте каждый десятитысячный тик и номер:

plt.xticks(range(len(number))[::10000], time[::10000], rotation=90, size='small') 

сделать шаги постепенно меньше, чтобы увидеть, что остается читаемым.

Чтобы получить увеличение на работу, использовать plt.AutoLocator():

ax = plt.gca() # or use the reference to the axes you already have 
ax.xaxis.set_major_locator(plt.AutoLocator()) 
+0

Что делать, если я увеличить? Я не хочу терять точность. Кроме того, я понимаю, что графический инструмент автоматически показывает только то, что читается на текущем экране, не так ли? – Javier

+0

Добавлена ​​поддержка масштабирования. Теперь попробуйте 1000, 100 и т. Д. В качестве размера шага и посмотрите, все ли работает с масштабированием. –

+0

Как я и предполагал, это не помогло. Мой файл журнала имеет от 95 до 100 - случайная переменная вдоль номеров файлов на метку времени, поэтому, когда я масштабируюсь достаточно глубоко, отметки времени просто не соответствуют номерам, потому что я теряю точность. Другими словами, мне нужно установить размер шага в 1, чтобы получить эту работу. Но это фактически решило проблему MemoryError, поэтому для matplotlib это просто кажется слишком большим. – Javier

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