Seaborn скрипка сюжет со временем дали numpy ndarray - PullRequest
2 голосов
/ 22 февраля 2020

У меня есть распределение, которое меняется со временем, для которого я хотел бы построить график игры на скрипке для каждого временного шага, используя seaborn. Моя первоначальная попытка не удалась, так как violinplot не может обработать np.ndarray для аргумента y:

import numpy as np
import seaborn as sns

time = np.arange(0, 10)
samples = np.random.randn(10, 200)

ax = sns.violinplot(x=time, y=samples)  # Exception: Data must be 1-dimensional

В документации по морю есть пример вертикальной скрипки, сгруппированной по категориям переменная. Тем не менее, он использует DataFrame в длинном формате.

Нужно ли также преобразовывать мои временные ряды в DataFrame? Если да, то как мне этого добиться?

Ответы [ 2 ]

4 голосов
/ 22 февраля 2020

При внимательном рассмотрении документации я понял, что полное исключение аргумента x и y приводит к тому, что аргумент data интерпретируется в широком формате:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


samples = np.random.randn(20, 10)
ax = sns.violinplot(data=samples)
plt.show()

Violin plot over time

0 голосов
/ 22 февраля 2020

В документации на сюжет скрипки сказано, что входные параметры x и y не обязательно должны быть фреймом данных, но они имеют ограничение на одинаковое измерение. Кроме того, созданная вами переменная y имеет 10 строк и 200 столбцов. Это вредно при построении графики и вызывает проблему с размерами. Я протестировал его, и у этого кода нет проблем при чтении файла python.

import numpy as np
import seaborn as sns
import pandas as pd

time = np.arange(0, 200)
samples = np.random.randn(10, 200)

for sample in samples:
    ax = sns.violinplot(x=time, y=sample)

Затем можно сгруппировать полученные графики, используя эту ссылку: https://python-graph-gallery.com/199-matplotlib-style-sheets/

Если вы хотите преобразовать ваши данные во фреймы данных, это также возможно. Вам просто нужно использовать pandas.

пример

import pandas as pd
x = [1,2,3,4]
df = pd.DataFrame(x)
...