更多商业数据分析案例(原理,完整代码,数据集)、统计学、SQL、网络爬虫详见公众号 " 数据分析与商业实践 "
这是一个自写库系列,底部还有相关的骚操作快捷绘图的链接。不多说,已知 mu 和 sigma,一行代码实现复杂绘图,各种细节配置尽在不言中。
PS:这个图的具体用法在下面这个链接
统计学(一): Z 分数 & 正态分布 (附 Python 实现代码) --Z 检验先修; Z 分数与正态分布两者关系; Z 分数与百分位数的异同;面试要点(以心理学实验为舟)
夸张了吧,上面的这个破图也好意思叫复杂绘图?可能会有不少朋友这样想,可以理解,下面来拆解一下知识点与呈现绘图代码。
宏观来看
细节来看
纳米细节来看
上面是我暂时所能想到的细节,其实都封装在自己写好绘图库 myplots 中了。但绘图代码并不是自己创作的,而是从前人和各种大神的代码中学习并积累下来的,为了画出一幅还比较完美的图,已经踩过无数的坑了,码下来后也可以自行改装,添加。
&emsp代码中的注释已经非常非常详细了!希望能够帮你规避画图中的各种坑
# 基础配置
# 基础库
import numpy as np
import pandas as pd
# 基础绘图库
import matplotlib.pyplot as plt
import seaborn as sns
# %matplotlib inline
# 各种细节配置如 文字大小,图例文字等杂项
large = 22; med = 16; small = 12
params = {
'axes.titlesize': large,
'legend.fontsize': med,
'figure.figsize': (16, 10),
'axes.labelsize': med,
'axes.titlesize': med,
'xtick.labelsize': med,
'ytick.labelsize': med,
'figure.titlesize': large}
plt.rcParams.update(params)
plt.style.use('seaborn-whitegrid')
sns.set_style("white")
plt.rc('font', **{
'family': 'Microsoft YaHei, SimHei'}) # 设置中文字体的支持
# sns.set(font='SimHei') # 解决Seaborn中文显示问题,但会自动添加背景灰色网格
plt.rcParams['axes.unicode_minus'] = False
# 解决保存图像是负号'-'显示为方块的问题
# 提高输出效率库
from IPython.core.interactiveshell import InteractiveShell # 实现 notebook 的多行输出
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
from IPython.display import Image # 插入图片包
# Image(filename="img/pythonl. png", width=400, height=400)
import math
####################### 绘制正态曲线 #######################
def normal_curve(mu, sigma, figsize=(10,8), despine=True):
""" 传入 x,均值 """
#正态分布的概率密度函数。可以理解成 x 是 mu(均值)和 sigma(标准差)的函数
def normfun(x, mu=mu, sigma=sigma):
pdf = np.exp(-((x - mu)**2)/(2*sigma**2)) / (sigma * np.sqrt(2*np.pi))
return pdf
plt.figure(figsize=figsize)
# Python实现正态分布
# 绘制正态分布概率密度函数
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 50)
y_sig = normfun(x=x, mu=mu, sigma=sigma)
plt.plot(x, y_sig, "r-", linewidth=2) # 波形曲线
# 添加垂直分隔线
plt.vlines(mu, 0, np.exp(-(mu - mu) ** 2 /(2* sigma **2))/(np.sqrt(2*np.pi)*sigma), colors = "c", linestyles = "dashed")
plt.vlines(mu+sigma, 0, np.exp(-(mu+sigma - mu) ** 2 /(2* sigma **2))/(np.sqrt(2*np.pi)*sigma), colors = "k", linestyles = "dotted")
plt.vlines(mu+2*sigma, 0, np.exp(-(mu+2*sigma - mu) ** 2 /(2* sigma **2))/(np.sqrt(2*np.pi)*sigma), colors = "k", linestyles = "dotted")
plt.vlines(mu-sigma, 0, np.exp(-(mu-sigma - mu) ** 2 /(2* sigma **2))/(np.sqrt(2*np.pi)*sigma), colors = "k", linestyles = "dotted")
plt.vlines(mu-2*sigma, 0, np.exp(-(mu-2*sigma - mu) ** 2 /(2* sigma **2))/(np.sqrt(2*np.pi)*sigma), colors = "k", linestyles = "dotted")
# 添加坐标轴
plt.xticks ([mu-2*sigma, mu-sigma, mu , mu+sigma, mu+2*sigma],
['μ-2σ', 'μ-σ', 'μ', 'μ+σ', 'μ+2σ'])
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Normal Distribution: $\mu = %.2f, $sigma=%.2f'%(mu,sigma))
plt.grid(True)
if despine == True:
sns.despine(trim=True, left=True, offset=10)
精彩回顾,都是一行代码实现复杂绘图的自写库系列
数据分析,商业实践,数据可视化,网络爬虫,统计学,Excel,Word, 社会心理学,认知心理学,行为科学,民族意志学 各种专栏后续疯狂补充
欢迎评论与私信交流!