Я хотел бы получить график, подобный тому, который я нарисовал:
По оси x дата собранных данных, а по оси y соответствующие плотности.
Я написал эти несколько строк:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd
from datetime import datetime
df = pd.DataFrame(np.random.rand(7, 100), columns=['y']*100)
df.index = pd.date_range(datetime.today(), periods=7).tolist()
sns.kdeplot(data=df, y='y', fill=True, alpha=.5, linewidth=0)
plt.show()
но, конечно, это не работает. Как я могу изменить код, чтобы получить то, что я себе представлял?
Это легко сделать с помощью statsmodels.graphics.boxplots.violinplot
from statsmodels.graphics.boxplots import violinplot
fig, ax = plt.subplots()
violinplot(data=df.values, ax=ax, labels=df.index.strftime('%Y-%m-%d'), side='right', show_boxplot=False)
fig.autofmt_xdate()
Вы можете размещать скрипки в произвольных позициях, используя параметр positions=
, так что это должно быть выполнимо.
хорошее решение! Просто x-позиции не будут следовать за датами, верно? Я имею в виду, если даты распределены неравномерно