python 2次元ガウス分布の2种类のプロット方法。ひとつはcontourfを使うもので,もうひとつはpathes.Ellipseでstd = 1,2信頼楕ををを描写する
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 2次元ガウス分布の2种类のプロット方法。ひとつはcontourfを使うもので,もうひとつはpathes.Ellipseでstd = 1,2信頼楕ををを描写する相关的知识,希望对你有一定的参考价值。
import numpy as np
from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt
from matplotlib import patches
# Parameters
mu = [0,0]
Sigma = [[1.5, .5],[.5, 1]]
fig, axes = plt.subplots(1,2, figsize=(10,5))
# 1. contourf
# -----------
x_min, x_max = (-3, 3)
y_min, y_max = (-3, 3)
h = .05
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
zz = np.c_[xx.ravel(), yy.ravel()]
Z = multivariate_normal(mu, Sigma).pdf(zz)
Z = Z.reshape(xx.shape)
axes[0].contourf(xx, yy, Z, cmap=plt.cm.bone)
axes[0].set_title('contourf')
# 2. patches.Ellipse
# ------------------
def get_ellipse(mean, cov, std=1):
eigvalues, V = np.linalg.eigh(cov)
order = eigvalues.argsort()[::-1]
eigvalues, V = eigvalues[order], V[:,order]
w = 2 * eigvalues[0] * std
h = 2 * eigvalues[1] * std
vec = V[:,0]
if vec[0] < 0:
vec = vec * [-1, 1]
deg = np.degrees(np.arccos(vec.dot([1,0])))
return w, h, deg
w, h, deg = get_ellipse(mu, Sigma)
fc = plt.cm.Set1(0)
ec = plt.cm.Set1(0)
e_std1 = patches.Ellipse(xy=mu, width=w, height=h, angle=deg,
fc=fc, ec=ec, lw=3, fill=False)
e_std2 = patches.Ellipse(xy=mu, width=2*w, height=2*h, angle=deg,
fc=fc, ec=ec, lw=3, fill=False)
axes[1].add_patch(e_std1)
axes[1].add_patch(e_std2)
axes[1].set_xlim(x_min, x_max)
axes[1].set_ylim(y_min, y_max)
axes[1].set_title('Ellipse')
plt.show()
以上是关于python 2次元ガウス分布の2种类のプロット方法。ひとつはcontourfを使うもので,もうひとつはpathes.Ellipseでstd = 1,2信頼楕ををを描写する的主要内容,如果未能解决你的问题,请参考以下文章
python 纬度·経度で地図プロットする
r マルチプロット
python モチーフの2次构造と配列のセットからantaRNAによって配列セットを作る。
markdown Ubuntu的のプロキシ设定方法.MD
markdown オブジェクトのプロパティを列挙する
markdown オブジェクトのプロパティの値一覧を出す