如何在Python中使用plotly绘制密度曲线?
具体来说,我想针对某些标准密度执行此操作。
<小时/>更新:
到目前为止,实现我要求的最佳方法(在 Jupyter 笔记本中):
import numpy as np
from scipy import stats
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)
绘图
xrange = np.arange(-4.5,5,0.0025)
norm = go.Scatter(x=xrange,
y=stats.norm(loc=0, scale=1).pdf(xrange),
mode='lines',
line=dict(width=1.5),
name='Normal',
)
lognorm = go.Scatter(x=xrange[xrange>0],
y=stats.lognorm(s=1, loc=0, scale=1).pdf(xrange[xrange>0]),
mode='lines',
line=dict(width=1.5),
name='Lognormal',
)
cauchy = go.Scatter(x=xrange,
y=stats.cauchy(loc=0, scale=1).pdf(xrange),
mode='lines',
line=dict(width=1.5),
name='Cauchy',
)
data = [norm, lognorm, cauchy]
iplot(data, show_link=False)
<小时/>
我一直在寻找一种简单、简约的方法,例如在 Mathematica 中完成的方法:
Plot[{PDF[NormalDistribution[], x], PDF[LogNormalDistribution[0, 1], x], PDF[CauchyDistribution[], x]}, {x, -4.5, 4.5}]
最佳答案
下面的代码使用gaussian_kde
。这些绘图位于 iplot()
、plotly
以及 matplotlib
和 seaborn
中。将它们放在一起进行比较。 (Jupyter Notebook 5.0.0
、Python 3.6.6
)
# Import libraries
import pandas as pd
import numpy as np
from numpy import linspace
import seaborn as sns
from matplotlib import pyplot as plt
import scipy.stats as st
from scipy.stats.kde import gaussian_kde
import plotly.offline as pyo
import plotly.graph_objs as go
from plotly import __version__
%matplotlib inline
import cufflinks as cf
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
init_notebook_mode(connected=True)
cf.go_offline()
创建示例数据
np.random.seed(1)
data = pd.DataFrame(np.random.randn(500,1), columns=['x'])
data.head(2)
计算 kde
值并将其放入数据框中
df = pd.DataFrame({'x_range': linspace(min(data['x']), max(data['x']), len(data['x'])),
'x_kde': kde(x_range)
})
使用iplot()
创建绘图
df.iplot(x='x_range', y='x_kde')
使用plotly
创建绘图
注意:该图在新的浏览器窗口中打开
# Create trace, data and layout
trace = go.Scatter(x=df['x_range'],y=df['x_kde'], mode='markers',name='markers')
data = [trace]
layout = go.Layout(title='Line Chart')
# Plot figure
fig = go.Figure(data=data, layout=layout)
pyo.offline.plot(fig)
使用Seaborn
绘图
sns.distplot(data['x'], hist=False, rug=True)
使用基本绘图
data['x'].plot.density()
使用Matplotlib
绘图
kde = gaussian_kde(data.x)
x_range = linspace(min(data.x), max(data.x), len(data.x))
plt.plot(x_range, kde(x_range) )
编辑。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 .
一种方法是编译 dataframe
中的所有值,然后将其发送到一行中的 iplot()
。
创建数据框
df = pd.DataFrame({'xrange':np.arange(-4.5,5,0.0025)})
df['norm_x'] = stats.norm(loc=0, scale=1).pdf(df['xrange'])
df['cauchy_x'] = stats.cauchy(loc=0, scale=1).pdf(df['xrange'])
df['lognormal_x'] = stats.lognorm(s=1, loc=0, scale=1).pdf(df['xrange'])
df = pd.DataFrame({'xrange':xrange, 'norm_x':norm_x, 'cauchy_x':cauchy_x, 'lognormal_x':lognormal_x})
使用 iplot() 进行绘图
df.iplot(x='xrange', y=['norm_x', 'cauchy_x', 'lognormal_x'])
关于python - 如何使用plotly绘制标准密度曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51296001/