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 オブジェクトのプロパティの値一覧を出す