扁平化文字对象的仿射变换
使用matplotlib的TextPath和Affine2D可以对文字进行各种几何变换。 文字被转换为路径对象,然后应用平移、旋转、缩放、剪切等变换。
📝 文字对象的仿射变换
将文字转换为路径,应用平移、旋转、缩放、剪切等变换
当前变换
原始位置,未经变换
变换顺序很重要:
从右向左应用(矩阵乘法)
📐 基础变换
平移改变位置,缩放改变大小, 旋转改变方向。
🔄 组合变换
通过链式调用组合多个变换, 创造复杂效果。
✂️ 剪切变换
沿x或y轴剪切, 产生倾斜效果。
💡 应用场景: 文字特效、Logo设计、动画制作、数据标注。 SVG路径变换在Web设计和数据可视化中广泛应用。
原图
原始文字"Visualize"位于原点,未经任何变换。
平移
translate(50, 50),文字整体移动到新位置。
缩放
scale(2, 5),横向放大2倍,纵向放大5倍。
缩放、旋转、平移
scale(2,2).rotate(45).translate(20,20),组合变换。
缩放、沿y剪切
scale(2,2).skew_deg(0,20),沿y轴剪切20度。
缩放、沿x剪切
scale(2,2).skew_deg(50,0),沿x轴剪切50度。
💡 变换组合
仿射变换可以通过矩阵乘法组合。变换的顺序很重要: 先缩放再旋转 与 先旋转再缩放 的结果不同。
使用链式调用时,变换从右向左应用(矩阵乘法的顺序)。
平面网格的仿射变换
通过对正交网格应用不同的仿射变换,可以直观展示变换对平面的影响。 仿射变换保持直线的平行性,但可能改变角度、距离和面积。
产生网格数据
在[-5, 5] × [-5, 5]范围内生成11×11的正交网格,共121个点。 网格的变换可视化了变换矩阵对整个平面的作用。
自定义可视化函数
用灰色绘制原始网格,蓝色绘制变换后的网格,用彩虹色标注网格点。
🔄 平面网格的仿射变换
仿射变换保持直线的平行性,将网格变换为新的网格
变换矩阵
I = [[1, 0], [0, 1]]
🔄 刚体变换
平移和旋转保持距离和角度不变, 网格形状和大小不变。
📐 相似变换
加上缩放,保持形状不变, 但大小可能改变。
🎨 仿射变换
保持平行性,直线仍是直线, 但角度和比例可能改变。
线性变换(过原点)
旋转
R(θ) = [[cosθ, -sinθ], [sinθ, cosθ]]
绕原点逆时针旋转30度
缩放
等比例:S = [[k, 0], [0, k]]
非等比:S = [[a, 0], [0, b]]
镜像
横轴:M = [[1, 0], [0, -1]]
纵轴:M = [[-1, 0], [0, 1]]
投影
横轴:P = [[1, 0], [0, 0]]
纵轴:P = [[0, 0], [0, 1]]
直线:P = vv^T
剪切
沿x:T = [[1, 0], [k, 1]]
沿y:T = [[1, k], [0, 1]]
仿射变换(可不过原点)
平移
x' = x + t,其中t = [4.5, -1.5]
整体移动,不改变形状和方向
先平移,再旋转
x' = (x + t)R
先移动质心,再绕新质心旋转
先旋转,再平移
x' = xR + t
先绕原点旋转,再平移
先缩放,再旋转
x' = xSR
结果为斜的椭圆网格
先旋转,再缩放
x' = xRS
结果为正的椭圆网格
正圆散点的几何变换
单位圆上的点经过旋转和Cholesky分解变换后,变为椭圆上的点。 这展示了协方差矩阵如何决定多元高斯分布的形状和方向。
产生数据
在单位圆上均匀采样37个点,用彩虹色标记。 同时绘制1/4正方形和完整正方形作为参考。
Chol分解
协方差矩阵ΣIGMA = A^T A,通过Cholesky分解得到R。 变换x' = U·R·x,其中U是旋转矩阵。
这种变换将标准正态分布转换为具有任意协方差的多元正态分布。
⭕ 圆到椭圆的仿射变换
通过旋转和Cholesky分解变换,将单位圆变为椭圆
变换步骤
1. 旋转矩阵U
U(θ) = [[cosθ, -sinθ], [sinθ, cosθ]]
2. Cholesky分解R
ΣIGMA = R^T R
3. 组合变换
x' = U · R · x
🎨 颜色编码
圆上的点用彩虹色编码, 相同颜色的点显示变换前后的对应关系。
📐 协方差与椭圆
Cholesky分解将协方差矩阵分解为L·L^T, 对应椭圆的形状和方向。
🔄 旋转效果
调整旋转角度观察椭圆主轴方向变化, 轨迹线展示点的运动路径。
🎯 统计意义
椭圆的主轴对应协方差矩阵的特征向量, 主轴长度对应特征值的平方根。
- • 旋转角度决定椭圆的主方向
- • Cholesky分解决定椭圆的形状(长短轴比)
- • 正方形的变换展示了坐标系的扭曲
- • 彩色点的轨迹展示了变换的连续性
平面点线投影
将鸢尾花数据投影到不同角度的直线上,观察投影后的分布特征。 投影是降维的基本操作,用于特征提取和数据可视化。
自定义函数
normal_pdf_1d():计算一元高斯分布的概率密度函数
draw_vector():绘制投影方向的箭头
导入数据
使用鸢尾花数据的前两个特征:sepal_length和sepal_width。 计算马氏距离等高线作为背景。
处理数据
对7个不同角度(0°, 15°, 30°, 45°, 60°, 75°, 90°)进行投影。 计算每个投影方向的均值和标准差,标准差反映了该方向的方差。
📊 平面点线投影
将2D数据投影到过原点的直线,观察投影分布
投影统计
均值: 5.65
标准差: 1.22
投影原理
投影向量
v = [cos45°, sin45°]
投影值
z = x · v = x₁cos θ + x₂sin θ
投影点
x' = z · v
🎯 最大方差投影
投影后标准差最大的方向, 对应数据的主成分方向(PCA)。
📉 降维效果
投影将2D数据降到1D, 保留特定方向的信息。
🔍 应用场景
特征提取、数据可视化、 Fisher判别分析。
📊 投影值
z = x·v = x₁cosθ + x₂sinθ
将2D点投影到1D直线,得到标量值
📍 投影点
x' = z·v
投影值乘以方向向量,得到2D平面上的投影点
📈 投影分布
投影后的1D数据近似服从高斯分布, 用PDF曲线可视化
二维数据分别朝16个不同方向投影
同时展示向16个均匀分布的方向(每隔22.5度)的投影结果。 形成一个放射状的投影可视化,直观展示数据在各个方向的分布。
自定义函数
normal_pdf_1d():计算一元高斯分布PDF,用于绘制投影后的分布曲线。
创建数据
生成具有相关性的二维数据,协方差矩阵cov = [[1, 0.86], [0.86, 1]]。 相关系数ρ = 0.86表示强正相关。
可视化
将16个投影方向均匀分布在360度范围内,用HSV色谱的不同颜色标记。 每个方向的投影结果包括:投影点、连线、PDF曲线。
🌈 16个方向同时投影
将数据同时投影到16个均匀分布的方向,用彩虹色区分
🎨 颜色编码
16个方向用HSV色谱标记,每隔22.5度一个方向。 相同颜色的点、线、曲线属于同一投影方向。
📊 方差分析
最大标准差方向: 203° (std = 1.41)
最小标准差方向: 113° (std = 0.42)
🎯 主成分方向
方差最大的方向对应第一主成分, 揭示数据的主要变化方向。
📐 相关性可视化
正相关数据在对角线方向方差大, 垂直方向方差小。
🌟 放射状分布
16个方向的投影形成完整的 "指纹",展示数据全貌。
💡 PCA联系
主成分分析(PCA)就是寻找使投影方差最大的方向。 第一主成分是方差最大的方向,第二主成分是在垂直于第一主成分的方向中方差最大的方向。 通过观察16个方向的标准差分布,可以直观理解PCA的目标。
🌈 颜色编码
16个投影方向用彩虹色标记,从红色到紫色循环。 相同颜色的元素(点、线、曲线)属于同一投影方向。
📐 投影特性
投影到不过原点的直线:投影点分布在半径R=18的圆上。 每个方向的PDF曲线垂直于投影直线,展示1D分布。
🎯 关键洞察
在相关性较强的方向(对角线附近),投影后的方差最大,PDF曲线更扁平。 在相关性较弱的方向,投影后的方差较小,PDF曲线更尖锐。
主成分分析(PCA)就是寻找方差最大的投影方向。
💡 核心洞察
仿射变换是理解数据几何的基础。从最简单的平移,到保持形状的旋转和缩放, 再到改变角度的剪切和投影,每种变换都编码了对数据空间的不同操作。 文字的变换展示了路径对象的灵活性,网格的变换揭示了矩阵对整个平面的作用, 圆到椭圆的变换连接了线性代数与统计学——协方差矩阵决定了多元高斯分布的形状。
投影是降维的核心操作。将高维数据投影到低维子空间,既是数据可视化的必要手段, 也是特征提取的基本方法。不同投影方向保留了数据的不同信息——最大方差方向(PCA主成分) 保留了最多的能量,Fisher判别方向最大化了类间分离。16个方向的投影可视化 形成了一个完整的"指纹",展示了数据在所有方向的特性。理解变换的几何意义—— 从保持什么(距离、角度、平行性)到改变什么(形状、大小、方向), 能帮助我们选择合适的变换来解决实际问题。