用热图展示无理数的小数位
使用高精度数学库mpmath获取无理数的大量小数位(1025位), 将这些数字(0-9)映射为颜色,reshape为32×32矩阵, 用seaborn热图可视化。这种方法将抽象的数字序列转化为视觉图案, 揭示无理数小数位分布的随机性或潜在模式。
高精度计算
使用mpmath库设置精度:mp.dps = 2^10 + 1 = 1025位小数
mp.dps = 2**10 + 1
digits = str(mp.pi)[2:] # 去掉"3."
digits_matrix = np.array([int(x) for x in digits]).reshape((32, 32))
🔢 无理数的数字艺术
将无理数的小数位(0-9)映射为颜色,展示在32×32网格中,揭示数字分布的视觉模式
π - 圆周率
值: 3.14159265...
展示: 前1024位小数(32×32网格)
颜色: Rainbow色谱,0-9映射到不同颜色
💡 观察是否有明显的模式或随机性
颜色图例(0-9)
🎨 可视化方法
将1024位小数reshape为32×32矩阵, 每个单元格颜色代表该位的数字(0-9)。
🔍 观察要点
真正的无理数小数位应呈现随机分布, 不应有明显的规律或重复模式。
📊 数学意义
无理数的小数位是无限不循环的, 热图展示其局部分布特征。
🥧 π(圆周率)
π = 3.14159265...
圆周长与直径之比
📈 e(自然常数)
e = 2.71828182...
自然对数的底数
📐 √2(根号2)
√2 = 1.41421356...
正方形对角线长度
✨ φ(黄金分割比)
φ = 1.61803398...
(1+√5)/2
从散点到概率密度
使用鸢尾花数据集(iris)展示如何从离散的散点图过渡到连续的概率密度估计(KDE)。 核密度估计(Kernel Density Estimation)用高斯核对数据点进行平滑, 估计二维空间中的概率密度函数。详细理论参考《统计至简》第17章。
KDE等高线图
使用seaborn.kdeplot绘制核密度估计等高线填充图
sns.kdeplot(data=iris, x="sepal_length", y="sepal_width",
fill=True, cmap='RdYlBu_r', n_levels=20)
散点+等高线
使用scipy.stats.gaussian_kde计算PDF,叠加到散点图上
kernel = st.gaussian_kde(samples.T)
plt.contour(XX, YY, PDF, levels=15)
用散点颜色代表概率密度
将每个散点的颜色映射到该位置的概率密度值, 密度高的区域点颜色深,密度低的区域点颜色浅。
sns.scatterplot(x="sepal_length", y="sepal_width",
hue=kernel(samples.T), palette='RdYlBu_r')
🎨 自定义色谱
使用sns.light_palette('#0091FE', as_cmap=True)创建自定义蓝色渐变色谱。 也可使用dark_palette创建深色渐变。
🌸 按物种分类
设置hue="species",为三个鸢尾花物种分别绘制KDE等高线, fill=False仅显示等高线不填充。
满足二元高斯分布的随机数
生成服从二元高斯分布的随机样本,叠加理论概率密度函数(PDF)的等高线。 协方差矩阵控制两个变量的相关性:相关系数ρ决定椭圆的倾斜方向和程度。 ρ>0时正相关(右上倾斜),ρ<0时负相关(左上倾斜),ρ=0时独立(圆形)。
协方差矩阵
SIGMA = [[σ_X², σ_X·σ_Y·ρ], [σ_X·σ_Y·ρ, σ_Y²]]
当σ_X = σ_Y = 1时,SIGMA = [[1, ρ], [ρ, 1]]
ρ ∈ [-1, 1]是相关系数,控制X和Y的线性相关性
📊 二元高斯分布探索
观察不同相关系数ρ如何影响二元高斯分布的形状和样本点的分布模式
分布特征
均值: μ = (0, 0)
标准差: σ_X = σ_Y = 1
相关系数: ρ = 0.50
🟡 弱正相关:略微右上倾斜
➕ 正相关 (ρ>0)
X增大时Y倾向于增大, 分布呈右上-左下倾斜的椭圆。
⭕ 零相关 (ρ=0)
X和Y独立, 分布呈圆形,各方向标准差相同。
➖ 负相关 (ρ<0)
X增大时Y倾向于减小, 分布呈左上-右下倾斜的椭圆。
📈 ρ = +0.8
强正相关:X增大时Y倾向增大, 椭圆主轴右上-左下方向。
⭕ ρ = 0
零相关(独立):X和Y无线性关系, 分布呈圆形。
📉 ρ = -0.8
强负相关:X增大时Y倾向减小, 椭圆主轴左上-右下方向。
用色谱分段渲染一条曲线
使用matplotlib的LineCollection技术,将一条曲线打散成多个线段, 每个线段用不同颜色渲染,形成连续的颜色梯度效果。 这种技术特别适用于可视化时间序列、轨迹等数据, 用颜色编码时间或其他连续变量。
1. 定义函数
colorline(x, y, cmap):主函数
- • 调用make_segments将曲线打散
- • 使用LineCollection创建线段集合
- • array参数控制每段的颜色映射值
make_segments(x, y):辅助函数
- • 将点转换为形状(-1, 1, 2)
- • 连接相邻点形成线段
2. 生成随机轨迹
二维随机行走:
delta_x = np.random.normal(0, 1, N)
delta_y = np.random.normal(0, 1, N)
disp_x = np.cumsum(delta_x)
disp_y = np.cumsum(delta_y)
累加生成连续轨迹,添加起点(0, 0)
3-5. 可视化单条和多条曲线
单条曲线(N_steps=10000)
- • 黑色背景(dark_background)
- • rainbow_r色谱(反向彩虹)
- • 标记起点和终点(白色×)
多条曲线(50条×200步)
- • for循环绘制每条轨迹
- • rainbow色谱分段着色
- • σ=1, Δt=0.2参数
🎨 LineCollection
matplotlib核心技术, 高效渲染大量线段并单独着色。
🌈 颜色映射
array参数用np.linspace(0, 1, N), 线性映射到色谱。
⏱️ 时间编码
颜色代表时间进度, 直观展示轨迹演化过程。
随机行走的趋势
生成带漂移率μ的随机行走,绘制多条路径、均值轨迹和置信区域。 置信区域由理论公式 μt ± kσ√t 确定(k=1,2,3对应约68%, 95%, 99.7%)。 漂移率μ控制长期趋势:μ>0向上漂移,μ<0向下漂移,μ=0无趋势。
增量公式
ΔX ~ N(μ·Δt, σ·√Δt) = N(μ·Δt, σ²·Δt)
• 无漂移:μ=0,纯随机游走(布朗运动)
• 有漂移:μ≠0,带趋势的随机过程
📈 随机行走的趋势
观察漂移率μ如何影响随机行走的长期趋势,以及置信区域的演化
参数设置
漂移率 μ: -0.20
标准差 σ: 1
时间步 Δt: 1
总步数: 100
📉 向下漂移趋势
🔵 置信区域
3层蓝色带:μt ± kσ√t(k=1,2,3)
理论上约68%, 95%, 99.7%的路径落在对应区域内。
⚫ 深蓝细线
每条细线代表一条随机行走路径, 展示个体轨迹的随机性。
🔴 红色粗线
所有路径的均值, 应接近理论趋势 E[X_t] = μt。
📐 置信区域公式
在时刻t,随机行走X_t的分布为:
E[X_t] = μ·t
Var[X_t] = σ²·t
std[X_t] = σ·√t
因此置信区域为:μt ± kσ√t,随时间扩大
🎯 实际应用
金融:股价模型(几何布朗运动)
物理:粒子扩散、热传导
生物:种群动态、基因漂变
工程:信号处理、控制系统
💡 核心洞察
本章展示了数据可视化的多样性——从无理数的数字艺术到统计分布的概率密度, 再到随机过程的时间演化。每种可视化方法都揭示了数据的不同侧面: 热图将离散数字转化为连续色彩模式,KDE将散点平滑为概率密度曲面, 二元高斯分布用等高线展示相关性的几何意义,分段着色用颜色编码时间信息, 随机行走的置信带则揭示了不确定性如何随时间增长。
无理数的热图可视化虽然看似简单,却蕴含深刻意义——真正随机的数字序列 不应呈现明显的视觉模式。这种"缺乏模式"本身就是一种模式, 证明了无理数小数位的统计独立性。而在概率密度估计中, 我们看到了从离散到连续的转化——KDE不仅仅是数据的平滑, 更是从有限样本到总体分布的推断,这是统计学的核心思想。
二元高斯分布的相关性可视化直观展示了协方差矩阵的几何意义—— 正相关对应右上倾斜的椭圆,负相关对应左上倾斜,零相关对应圆形。 这种几何直觉在多元统计、主成分分析、机器学习中无处不在。 最后,随机行走的趋势带可视化揭示了随机过程的一个基本事实: 不确定性随时间平方根速度增长(σ√t),而确定性趋势线性增长(μt)。 这种"信噪比"随时间演化的规律,解释了为什么长期预测如此困难, 也是金融风险管理、气候预测、流行病学模型的理论基础。 从静态的热图到动态的随机过程,我们看到可视化如何帮助理解 从确定性到随机性、从离散到连续、从静态到动态的数学概念。