Создание набора функций с использованием стиля «скрипка-сюжет» в Python - PullRequest
0 голосов
/ 28 апреля 2019

Допустим, я хочу визуализировать функции f[n] = e^{-(x-n)^2}/n для n=1...10.Обратите внимание, что это не распределения вероятностей.

(на самом деле это не сюжет, который я хочу сделать, но достаточно близко).

Я бы хотел продемонстрировать это чем-то вроде скрипичного сюжета (https://matplotlib.org/gallery/statistics/violinplot.html), где для каждого n у меня есть вертикальная линия, и я рисую функцию по обеим сторонам вертикальной линии.

Но графики для скрипки, кажется, используются только для показа местоположенийобразец данных. Таким образом, все инструменты для этого требуют, чтобы я дал ему набор данных. Данные, которые я хочу построить, не относятся к этому типу - это действительно известная функция.

[если вы хотите больше контекстаэто связано с моим более ранним вопросом - https://stats.stackexchange.com/questions/403359/visualizing-2d-data-when-one-dimension-is-discrete-and-the-other-continuous].

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Вопрос немного широкий, поэтому, возможно, это не то, что вы ищете. Но, насколько я понимаю, вы просто хотите построить свою функцию в позиции f(x,n) в разных позициях n и иметь x на вертикальной оси.

import numpy as np
import matplotlib.pyplot as plt

f = lambda x, n: np.exp(-(x-n)**2)/n

x = np.linspace(-2,12,101)
ns = np.arange(1,11)

for n in ns:
    plt.fill_betweenx(x, -f(x,n)+n, f(x,n)+n, color="C0", alpha=0.5)

plt.xlabel("n")
plt.ylabel("x")
plt.xticks(ns)        
plt.show() 

enter image description here

0 голосов
/ 28 апреля 2019

IIUC, вы хотите что-то вроде этого:

df = pd.DataFrame({n: [np.exp(-(x-n)**2)/n  for x in np.arange(-1,1,0.1)] for n in range(1,11)})

fig, ax = plt.subplots(1,1, figsize=(10,10))
ax.violinplot(df.T)
plt.show()

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...