1. 从一个“翻车”的标题说起Excel函数到底能玩出什么花样“笛卡尔心形函数表达式”和“这该死的无处安放的Excel函数”这两个词凑在一起第一次看到的人大概率会愣一下——一个是数学课本里那个著名的浪漫传说一个是打工人每天都要面对的表格工具它们之间能有什么关系我最初也是带着这个疑问去动手试的结果一头扎进去就是好几个晚上。这篇文章想聊的就是怎么用Excel把那个传说中的心形曲线画出来以及在这个过程中Excel函数那些让人又爱又恨的脾气秉性。先把话说清楚这篇内容适合谁看如果你是会写几个基础函数、但总觉得Excel“就那样”的办公族或者你是对数学可视化有点兴趣、想找个轻量工具练手的学生党再或者你只是单纯好奇“心形到底能不能用表格画出来”那这篇东西应该能让你有所收获。它不需要你会编程不需要你装任何插件一台装了Excel的电脑就够。核心关键词就三个笛卡尔心形函数、Excel函数、散点图可视化。整篇内容围绕这三个词展开从原理到实操从踩坑到优化尽量把每一步都讲透。为什么偏偏选Excel来做这件事市面上能画函数图像的工具太多了专业的数学软件、在线的绘图网站、甚至几行代码就能搞定。但Excel有个别的东西比不了的优势它就在你手边。你每天打开它处理报表对它足够熟悉用它来做一件“不务正业”的事反而能逼着你去理解那些平时只会复制粘贴的函数到底在干什么。而且Excel的图表系统足够灵活散点图配合公式计算画出来的曲线精度完全够看。说白了这是一个用最熟悉的工具做最不熟悉的事的过程收获往往比想象中大。2. 心形函数的数学底子先搞懂再动手2.1 笛卡尔心形曲线的几种常见表达式动手之前得先把数学这关过了。心形曲线在数学上不止一种表达方式常见的有极坐标形式和参数方程形式另外还有一种隐函数形式。不同的形式对应到Excel里的实现难度完全不一样选错了形式后面会多走很多弯路。先看最广为人知的那个极坐标方程r a(1 - sinθ)这个式子里r是极径θ是极角a是一个控制大小的常数。θ从0走到2πr就跟着变化描出来的点连起来就是一个心形。这个形式的好处是直观一个式子搞定坏处是Excel原生不支持极坐标绘图你得自己把极坐标转成直角坐标才能画。再看参数方程形式x 16sin³ty 13cos t - 5cos 2t - 2cos 3t - cos 4t这个形式在网络上流传很广因为它画出来的心形比较“饱满”形状讨喜。t的取值范围是0到2π。参数方程的好处是直接给出x和y不需要做坐标转换Excel里两列数据就能直接上散点图实现起来最省事。还有一种隐函数形式比如(x² y² - 1)³ - x²y³ 0这种形式在Excel里实现起来最麻烦因为它是隐式的没法直接用一个公式算出y需要解方程或者用等高线的方式去逼近对普通用户不友好我建议直接放弃这条路。提示如果你只是想快速看到效果优先选参数方程形式如果你想顺便理解极坐标和直角坐标的转换关系可以挑战极坐标形式。隐函数形式除非你有特殊需求否则不建议在Excel里折腾。2.2 为什么选参数方程作为Excel实现方案选参数方程不是随便拍的脑袋背后有几个实打实的考量。第一是数据结构的匹配度。Excel的散点图需要两列数据一列X一列Y参数方程天然就是给你x(t)和y(t)两个表达式你只需要生成一列t值然后分别算出对应的x和y三列数据往表格里一放图表直接出来。极坐标形式则需要额外一步转换x r·cosθy r·sinθ多了一层计算虽然也不难但多一步就多一个出错的地方。第二是精度控制的便利性。参数方程里t的采样密度直接决定了曲线的平滑程度。t从0到2π你取100个点还是1000个点画出来的效果差别很明显。在Excel里控制这个很简单生成一列等差数列就行步长想调多细调多细。极坐标形式虽然也能这么干但θ和r的对应关系在转换过程中容易因为角度单位弧度还是度搞混新手很容易在这里翻车。第三是公式的可读性。参数方程的x和y表达式虽然看起来长但每一项都是独立的三角函数拆开来看很清晰。你在Excel里写公式的时候可以一项一项地拼写错了也容易定位是哪一项出的问题。极坐标那个r a(1 - sinθ)虽然短但转换到直角坐标后公式里会嵌套sin和cos排查起来反而更费劲。基于这三点我最终选的是参数方程这条路。下面所有的实操步骤都围绕这个方案展开。如果你对极坐标形式有执念后面我也会提一嘴怎么改但主线走参数方程。2.3 参数t的采样策略点少了像多边形点多了卡电脑t的采样是整个过程里最容易被忽视、但对最终效果影响最大的一个环节。说直白点t的采样就是决定你用多少个点去“描”这条曲线。点太少曲线看起来像用直线段拼出来的多边形棱角分明点太多Excel计算量上去了图表渲染也会变慢低配电脑上甚至能卡到你想砸键盘。我的经验是t取0到2π步长用0.05到0.1之间比较合适。算一下2π约等于6.283步长0.1的话大概63个点步长0.05的话大概126个点。实测下来126个点画出来的心形已经相当平滑了肉眼基本看不出棱角。如果你追求极致平滑步长降到0.02大概314个点效果更好但文件体积和计算时间会明显增加。这里有个细节要注意t的最后一个值要正好落在2π上或者稍微超过一点保证曲线闭合。如果你用步长0.1从0开始生成最后一个点可能是6.2离2π还差一点心形的底部会有一个小缺口。解决办法很简单生成序列的时候把终点设成2π让Excel自动算步长或者手动在最后补一个2π的行。注意不要一上来就设几千个点先拿100个点左右跑通流程看到图形没问题了再根据需要对采样密度做微调。上来就堆点数是新手常见的误区除了让电脑变慢之外没有任何好处。3. Excel实操全流程从空白表格到心形曲线3.1 第一步搭好数据骨架打开Excel新建一个空白工作簿。在A1单元格输入“t”B1输入“x”C1输入“y”这三列就是整个项目的数据骨架。A列放t的值。在A2单元格输入0然后选中A2用填充序列的方式生成等差数列。具体操作菜单栏找“填充”里的“序列”序列产生在“列”类型选“等差序列”步长值填0.1终止值填6.2832也就是2π的近似值。点确定A列就会自动填满从0到6.2832、步长0.1的一串数字。这里有个小坑要提醒Excel的填充序列对终止值的处理是“不超过终止值”所以最后一个数可能不是精确的6.2832而是6.2。如果你介意这个可以手动把最后一个单元格改成6.2832或者干脆把终止值设成6.29让它多生成一个点然后把超出的那行删掉。我个人的习惯是手动补最后一行保证曲线闭合。B列和C列放公式。B2单元格输入x的参数方程表达式C2输入y的表达式。注意Excel里的三角函数默认用弧度t本身就是弧度值所以直接写就行不需要额外转换。公式里所有的t都引用A2单元格。写公式的时候有个技巧先把公式在记事本里拼好检查一遍括号和运算符再粘贴到Excel里。参数方程的x表达式里有三次方和多个三角函数相乘括号嵌套比较多直接在Excel编辑栏里写容易漏括号。我头几次就是在这里翻车的公式报错查了半天最后发现是少了一个右括号。3.2 第二步把公式写对别让括号坑了你x的公式按参数方程 x 16sin³t 来写在Excel里是16*SIN(A2)^3这个还算简单。y的公式就长了y 13cos t - 5cos 2t - 2cos 3t - cos 4t在Excel里写成13*COS(A2)-5*COS(2*A2)-2*COS(3*A2)-COS(4*A2)写的时候注意乘号不能省COS和括号之间也不能省。Excel对公式的语法要求比较严格少一个星号就报错。另外2*A2这种写法不能写成2A2Excel不认。公式写好后选中B2和C2双击右下角的填充柄让公式自动填充到A列有数据的最后一行。填充完之后B列和C列就是对应每个t值的x和y坐标了。提示填充完之后随便挑一行验算一下。比如t0的时候sin00x应该等于0cos01y 13-5-2-1 5。去表格里找t0那一行看x是不是0、y是不是5对上了说明公式没问题。这个验算步骤花不了半分钟但能帮你提前发现大部分公式错误。3.3 第三步插入散点图让曲线现形数据准备好了接下来就是画图。选中B列和C列的数据区域从B2到C列最后一行菜单栏“插入”里找到散点图选“带平滑线的散点图”或者“仅带数据标记的散点图”都行。前者画出来是连续的曲线后者是一堆点看个人喜好。我一般先用“仅带数据标记的散点图”看点的分布对不对确认没问题再换成平滑线。图出来之后你大概率会发现它长得不太像心形可能是个歪的或者比例不对。别慌这很正常原因通常有两个一是坐标轴的纵横比不对二是数据范围没调好。先说纵横比。Excel的图表默认会自动缩放坐标轴x和y的刻度范围可能不一样导致图形被拉伸或压扁。解决办法是手动设置坐标轴范围让x轴和y轴的单位长度在视觉上一致。双击坐标轴在“坐标轴选项”里把最小值、最大值设成对称的范围比如x轴设-20到20y轴也设-20到20。这样图形就不会变形了。再说数据范围。参数方程画出来的心形x的范围大概在-16到16之间y的范围大概在-17到12之间。如果你发现心形被切掉了一部分检查一下坐标轴的最大最小值是不是没覆盖到数据的实际范围。把范围放宽一点图形就完整了。3.4 第四步调参美化让心形更像“心”图形基本成型之后剩下的就是调参和美化。这一步没有标准答案全看个人审美但有几个地方值得调一调。颜色和线条散点图的点可以调小一点线条可以调粗一点颜色选个顺眼的。我一般把线条设成红色或者粉色点设成不显示或者很小这样看起来更像一个完整的心形轮廓而不是一串珠子。坐标轴和网格线把坐标轴的数字和网格线隐藏掉画面会干净很多。双击坐标轴在“标签”里选“无”网格线在“图表元素”里取消勾选。这样图里就只剩一个心形视觉焦点很集中。图表标题和背景标题可以删掉或者改成自己想要的话背景设成白色或者透明。如果是要发给别人看加个标题也无妨如果是自己看着玩越简洁越好。调参的过程中你会发现参数方程里那些系数16、13、5、2、1稍微改一改心形的胖瘦和比例就会变。比如把x表达式里的16改小一点心形会变窄把y表达式里的13改大一点心形会变高。这个可以自己试着玩没有对错之分纯粹是形状偏好问题。4. 那些年我踩过的坑问题排查与避坑指南4.1 公式报错和图形异常速查表实操过程中遇到的问题五花八门我把最常见的几类整理成了一张表方便对照排查。现象可能原因解决办法公式输入后显示#NAME?函数名拼写错误或用了Excel不认识的函数检查SIN、COS拼写确认没有多余空格公式显示#VALUE!引用的单元格不是数值或括号不匹配检查A列是否为数值逐层核对括号图形是一条直线或一个点公式引用错误所有行算出来是同一个值检查公式里的A2是否随行号变化填充时是否用了绝对引用心形只有一半t的采样范围不够没覆盖完整周期确认t从0到2π最后一行补上2π心形底部有缺口最后一个t值没到2π手动把最后一行t改成6.2832图形被拉伸变形坐标轴纵横比不一致手动设置x轴和y轴的范围保持单位长度一致曲线棱角明显t的采样点太少减小步长增加采样点数量Excel卡顿严重采样点过多或图表类型选了平滑线且点数巨大减少采样点或改用仅数据标记的散点图这张表里的每一条都是我或者身边人实际遇到过的。其中“公式引用错误导致图形是一条直线”这个坑最隐蔽因为公式看起来没报错但结果就是不对。原因通常是填充公式的时候用了绝对引用比如$A$2导致每一行都引用同一个t值算出来的x和y全都一样所有点叠在一起看起来就是一个点或者一条线。解决办法是确保公式里用的是相对引用A2填充时它会自动变成A3、A4。4.2 关于Excel函数的那点“脾气”标题里说“这该死的无处安放的Excel函数”这话不是白说的。用Excel写数学公式有几个脾气你得顺着它来。第一Excel的三角函数只认弧度。你要是习惯用角度得先乘以π/180转成弧度。参数方程里的t本身就是弧度所以这个问题在这个项目里不明显但如果你改用心形函数的其他变体涉及到角度的地方一定要注意。第二Excel的运算符优先级和数学课本一致但括号必须写全。数学里写个分式分子分母一目了然Excel里不行除法必须用斜杠分子分母有运算的必须加括号。比如(ab)/(cd)括号少一个结果就全错。第三Excel对空单元格和文本的处理比较“宽容”有时候公式引用了空单元格不报错而是当0处理这会导致一些隐蔽的错误。所以数据区域里不要留空行填充公式的时候确保每一行都有对应的t值。第四大数量级的计算要注意浮点误差。参数方程里的三次方和三角函数叠加在极端值附近可能会有微小的精度偏差但对我们画图来说完全不影响肉眼看不出来。如果你发现某个点的位置明显偏离先检查公式再检查t值一般不会是浮点误差的问题。注意Excel的公式是“活”的你改了A列的t值B列和C列会自动重算图表也会跟着变。这个特性既是优点也是坑——优点是调参方便改一个数就能看到效果坑是如果你不小心动了某个单元格可能整个图形就变了而且不容易发现是哪里改的。建议在调参阶段多存几个版本或者把关键参数单独放在一个单元格里公式引用那个单元格这样改起来可控。4.3 性能优化别让心形把电脑拖垮采样点数量上去之后Excel的计算和渲染压力会明显增加。我试过用步长0.01生成六百多个点在一台老笔记本上每次改公式都要等好几秒才能重算完拖动图表也有明显的卡顿感。如果你也遇到这种情况有几个优化方向。减少不必要的计算。B列和C列的公式只依赖A列确保没有引用其他无关单元格。图表的数据源只选B列和C列的有效区域不要把整列都选进去否则Excel会去处理大量空单元格。图表类型选轻量的。平滑线散点图比仅数据标记的散点图渲染开销大如果点数很多优先用仅数据标记或者把标记调小。等最终效果确认了再换成平滑线出图。关掉自动重算。Excel默认是自动重算改一个单元格全部公式重算。在“公式”选项卡里把计算方式改成“手动”调参的时候手动按F9重算能省不少等待时间。当然调完之后记得改回自动不然以后用Excel会不习惯。分文件操作。如果数据量实在大可以把数据计算和图表展示分到两个文件里计算文件负责生成数据展示文件只放图表和引用过来的数据。这样改公式的时候不会触发图表重绘流畅度会好很多。5. 从心形到任意曲线这套方法的延展玩法5.1 换一个函数就是另一条曲线心形画出来之后这套方法的延展性其实很强。本质上你做的事情是用一列参数t通过两个函数x(t)和y(t)生成坐标点再用散点图连起来。只要你能写出x(t)和y(t)的表达式任何参数曲线都能用同样的流程画出来。比如画一个圆x cos ty sin tt从0到2π。比如画一个椭圆x a·cos ty b·sin t改a和b就能调长短轴。再比如画李萨如图形x sin(at)y sin(bt)改a和b的比值能得到各种交织的图案。这些在Excel里都是同样的操作改B列和C列的公式图表自动更新。我拿这套方法画过螺旋线、摆线、甚至一些简单的分形近似图形。每次都是改公式、调采样、看效果流程完全一样。心形只是入口真正有价值的是这套“参数方程加散点图”的通用方法。5.2 把心形做成动态图表如果你对Excel的动态图表有点了解可以把这个心形做成可交互的。思路是把参数方程里的系数比如控制大小的a单独放在一个单元格里公式引用那个单元格。然后加一个滚动条控件拖动滚动条就能改变a的值心形跟着放大缩小。具体操作在“开发工具”选项卡里插入一个滚动条控件设置最小值和最大值链接到一个空白单元格比如E1。然后把公式里的常数换成对E1的引用。这样拖动滚动条E1的值变化公式重算心形大小跟着变。这个玩法适合做演示或者给小孩子看直观展示参数对图形的影响。不过要提醒一句滚动条控件在不同版本的Excel里位置和设置方式略有差异如果找不到“开发工具”选项卡需要在选项里把它调出来。另外控件和公式的联动有时候会有延迟拖动太快可能图表跟不上这是正常现象松手之后会更新到位。5.3 导出和分享的几种方式画好的心形想分享出去有几种方式。最简单的是截图选中图表区域复制粘贴到聊天窗口或者文档里。如果对方也要Excel文件直接发文件但注意公式和图表在低版本Excel里可能有兼容性问题最好确认一下对方的版本。想要更高清的图可以把图表复制到PowerPoint里再另存为图片分辨率会比直接截图高一些。或者用Excel的“另存为”功能把图表单独存成图片格式。不过Excel导出的图片质量一般如果对清晰度要求高还是得用专业的截图工具或者虚拟打印机。还有一种玩法是把数据导出来用其他工具做进一步处理。B列和C列的数据复制到文本文件里就是标准的坐标点数据导入到任何绘图工具里都能用。这个适合想把心形用到其他项目里的场景。6. 一些实操之后的个人体会这套东西折腾下来最大的感受是Excel的函数没有想象中那么“死板”它只是被大多数人用在了报表和统计上实际上它的计算能力足够支撑很多有意思的玩法。参数方程画心形这件事本身没什么实用价值但过程中对公式引用、填充逻辑、图表配置的理解是能迁移到正经工作里的。比如那个“绝对引用和相对引用”的坑我在做心形的时候踩过一次后来做数据透视表和多表关联的时候又遇到类似的问题因为有了前面的教训第二次就很快反应过来了。再比如坐标轴范围的手动设置这个技巧在做任何图表的时候都用得上默认的自动缩放经常把图形搞得比例失调。还有一个体会是关于“采样密度”的。这个思路在数据分析里其实很常见——你用多少数据点去描述一个趋势点太少信息丢失点太多噪音和计算成本都上来了。心形曲线是个直观的例子看多了就能对“多少点够用”有个手感。最后分享一个小技巧如果你在写长公式的时候老是漏括号可以先把公式拆成几段分别写在不同的单元格里确认每一段都对再把它们拼起来。比如y的公式可以拆成四项分别算13cos t、5cos 2t、2cos 3t、cos 4t最后再相减。这样排查错误的时候一眼就能看出是哪一项的问题。拼好之后把中间单元格删掉公式合并成一条不影响最终结果。这个笨办法在公式复杂的时候特别管用比对着编辑栏数括号靠谱多了。
阅读完成 · 觉得有帮助?