Внедрение графиков горизонта в matplotlib

Я пытаюсь реализовать диаграммы горизонта в matplotlib (см .: http://square.github.com/cubism/ )

Основная идея состоит в том, что вы показываете временные ряды в узком соотношении сторон, а по мере увеличения значений (за пределом оси y) они начинают восстанавливаться снизу в более темном цвете (подумайте о старых играх Atari, когда вы пойдете мимо верхней части экрана и выскочите в нижней части экрана).

Мой основной подход состоит в том, чтобы разделить y-данные на патроны и построить каждую вертикальную группу по новым осям с использованием ax.twinx() и соответствующим образом установить пределы.

Только для положительных или отрицательных данных это работает хорошо.

Положительный:

позитивная диаграмма горизонта

Отрицательный:

отрицательная гистограмма

Но по какой-то причине оба винта поднимаются вверх:

 # setup the environment import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, np.pi*4, 137) y = (2*np.random.normal(size=137) + x**2) # reflect everything around the origin xx = np.hstack([-1*x[::-1], x]) yy = np.hstack([-1*y[::-1], y]) # function to do the plot def horizonPlot(ax, x, y, nfolds=3, inverty=False, color='CornflowerBlue'): axes = [ax] if inverty: ylims = np.linspace(y.min(), y.max(), nfolds + 1)[::-1] else: ylims = np.linspace(y.min(), y.max(), nfolds + 1) for n in range(1, nfolds): newax = axes[-1].twinx() axes.append(newax) for n, ax in enumerate(axes): ax.fill_between(x, y, y2=ylims[n], facecolor=color, alpha=1.0/nfolds, zorder=n) ax.set_ylim([ylims[n], ylims[n+1]]) ax.set_yticklabels([]) ax.set_yticks([]) if inverty: ax.invert_yaxis() ax.set_xlim([x.min(), x.max()]) return fig fig, baseax = plt.subplots(figsize=(6.5,1.5)) posax = baseax.twinx() negax = posax.twinx() fig = horizonPlot(posax, xx, np.ma.masked_less(yy, 0), inverty=False, color='DarkGreen') fig = horizonPlot(negax, xx, np.ma.masked_greater(yy, 0), inverty=True, color='CornflowerBlue') for ax in fig.get_axes(): ax.set_yticklabels([]) fig.tight_layout() plt.show() 

Плохая диаграмма (обратите внимание на отсутствие нескольких слоев на положительной стороне):

обе диаграммы горизонта

Любые мысли были бы очень оценены!

One Solution collect form web for “Внедрение графиков горизонта в matplotlib”

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

Я просто рисую эти области на вершине eachother, так как это на самом деле отличная вещь в сюжете. Таким образом, мне не нужно настраивать альфа, они просто складываются.

 import numpy as np from matplotlib.pyplot import * def layer(y,height): neg=0.0;pos=0.0 if y>0: if y-height>=0: pos=height y-= pos else : pos = y elif y<0: if y+height<=0: neg=height y += neg else : neg = -y return pos,neg def horizonPlot(x,y,height=50.0,colors=['CornflowerBlue','DarkGreen']): alpha = .10 vlayer = np.vectorize(layer) while (y != 0).any(): l = vlayer(y,height) y -= l[0];y += l[1] fill_between(x,0,l[0],color=colors[0], alpha=alpha) fill_between(x,height-l[1],height,color=colors[1], alpha=alpha) def main(): x = np.linspace(0, np.pi*4, 137) y = (2*np.random.normal(size=137) + x**2) xx = np.hstack([-1*x[::-1], x]) yy = np.hstack([-1*y[::-1], y]) horizonPlot(xx,yy) show() 

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

введите описание изображения здесь

  • Порядок индексов в многомерном массиве Numpy
  • Как установить Matplotlib для anaconda 1.9.1 и Python 3.3.4?
  • Участок только на континенте в matplotlib
  • from matplotlib.backends import _tkagg ImportError: невозможно импортировать имя _tkagg
  • упорядочивая перетасованные точки, которые могут быть соединены для формирования многоугольника (в python)
  • Сохраните изображение в файл изображения вместо его отображения с помощью Matplotlib
  • Странное поведение zplotlib zorder с легендой и ошибкой
  • Как создать пользовательскую легенду в matplotlib
  • AttributeError: объект time.struct_time не имеет атрибута 'toordinal'
  • Интерактивное масштабирование Pyplot
  • matplotlib: изменить метки ярлыка yaxis
  •  
    Interesting Posts for Van-Lav

    Зачем нужно явно указывать при выполнении ОБНОВЛЕНИЯ?

    Что эквивалентно репутату MATLAB в NumPy

    Принудительное преобразование нечисловых массивов numpy с заменой NAN

    Как развернуть / перенести существующее приложение / проект django на производственный сервер на Heroku?

    Изменение подпроцесса Python с помощью клиента / сервера

    Считать количество слов в списке строк

    сортировать данные в формате pandas на основе списка

    Как импортировать модули из разных папок в Python?

    Оптимизация и ускорение математической функции в python

    Включение потоков импорта / экспорта между удаленной базой данных postgres и excel workbooks

    Как мы можем использовать tqdm в параллельном выполнении с помощью joblib?

    pip не будет устанавливать пакеты Python локально с помощью –user

    Как получить текущий экземпляр модели из inlineadmin в Django

    Преобразование ORM SQLAlchemy в pandas DataFrame

    Обертка .net для Google App Engine?

    Python - лучший язык программирования в мире.