Построить больше графиков вертикальной плотности на одном графике

Я хотел бы получить график, подобный тому, который я нарисовал:

По оси 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()

но, конечно, это не работает. Как я могу изменить код, чтобы получить то, что я себе представлял?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
742
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это легко сделать с помощью 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()

хорошее решение! Просто x-позиции не будут следовать за датами, верно? Я имею в виду, если даты распределены неравномерно

cflayer 13.12.2020 22:30

Вы можете размещать скрипки в произвольных позициях, используя параметр positions=, так что это должно быть выполнимо.

Diziet Asahi 13.12.2020 23:46

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