ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Excel函数画心形:笛卡尔心形函数与散点图实战

Excel函数画心形:笛卡尔心形函数与散点图实战

Excel 里藏着一个挺浪漫的东西,很多人用了好几年表格都没发现——用几个数学函数就能画出一颗心。标题里那句“这该死的,无处安放的,Excel函数”,说的其实就是这种状态:函数明明每天都在用,可一旦离开求和、查找、透视这些正经活儿,大多数人就不知道它们还能干什么了。笛卡尔心形函数表达式恰好是个反例,它把数学的冷和视觉的暖揉在一起,用最普通的散点图就能落地。

这篇内容适合三类人看:一是想在表格里做点小惊喜、给同事或朋友露一手的普通办公用户;二是正在学函数、需要一点正反馈来维持兴趣的初学者;三是对“参数方程怎么变成图形”这件事好奇、想弄明白背后逻辑的理工科读者。下面我会把心形线的几种常见表达式拆开讲清楚,重点放在 Excel 里怎么一步步把它画出来,包括数据怎么生成、图表怎么调、哪里容易翻车,以及我自己反复试出来的那些细节。

1. 心形线不止一个公式,先搞清楚你要哪一种

很多人搜“笛卡尔心形函数”,搜出来一堆长得完全不一样的式子,有带根号的、有带三角函数的、还有极坐标形式的,于是直接懵了。其实它们画出来的都是心形,只是数学表达方式不同,落到 Excel 里的操作难度也差很多。选错公式,后面调图表会非常痛苦,所以这一步值得先花几分钟理清。

1.1 极坐标形式:最适合 Excel 上手的一种

最经典也最好用的,是极坐标下的心形线方程:

r = a(1 - sinθ)

其中 θ 是角度,从 0 到 360 度(也就是 0 到 2π 弧度),a 是一个控制大小的常数,r 是极径。这个式子的好处是结构极简,只有一个三角函数,Excel 里一行公式就能算出来。它的几何含义是:随着角度 θ 转一圈,半径 r 按正弦规律变化,当 θ 在 90 度附近时 r 最小(接近 0),在 270 度附近时 r 最大(接近 2a),于是画出来上方收成一个尖,下方鼓成两个圆弧,正好是心的形状。

为什么它特别适合 Excel?因为 Excel 的散点图本质上是把一串 (x, y) 坐标点连起来,而极坐标转直角坐标只需要两个转换公式:

x = r * cosθ y = r * sinθ

也就是说,你只要在表格里生成三列——θ、x、y——就能直接出图。整个过程不需要任何插件,不需要宏,纯函数加图表,任何版本的 Excel 都能做。

1.2 直角坐标隐式形式:好看但 Excel 不擅长

另一个常被提到的是隐式方程:

(x² + y² - 1)³ - x²y³ = 0

这个式子画出来的心形更饱满、更对称,是很多数学教材里的标准图形。但它的问题在于“隐式”——x 和 y 纠缠在一起,没法直接写成 y = f(x) 的形式。要在 Excel 里画它,你得用网格扫描法:铺一张 x 和 y 的二维网格,对每个点计算左边表达式的值,接近 0 的点才算在曲线上。这种做法在 Excel 里极其笨重,需要成百上千个单元格做条件判断,而且边缘会有锯齿。

所以我的建议很明确:想在 Excel 里画心,优先用极坐标形式。隐式方程留给数学软件或者专门的绘图工具,Excel 不是干这个的。这不是能力问题,是工具定位问题,硬上只会浪费时间。

1.3 参数方程形式:灵活但多一层转换

还有一种参数方程写法:

x = 16sin³t y = 13cos t - 5cos2t - 2cos3t - cos4t

t 从 0 到 2π。这个式子的优点是形状非常标准,比例协调,画出来就是那种“教科书级”的心形。缺点是公式长,四个余弦项叠在一起,手敲容易出错。不过在 Excel 里它反而有个隐藏优势:x 和 y 都是 t 的显式函数,不需要先算 r 再转换,直接两列公式就能出坐标,逻辑上比极坐标还直接。

三种形式对比一下,选择就清楚了:

表达式类型公式复杂度Excel 实现难度图形效果推荐场景
极坐标 r=a(1-sinθ)低低上尖下圆,标准心形首选,通用
隐式 (x²+y²-1)³-x²y³=0中高饱满对称数学演示,非 Excel
参数方程 16sin³t 系列中高低比例协调追求图形精度

我个人的习惯是:日常演示、给非技术同事看,用极坐标;需要图形特别规整、要截图当素材,用参数方程。隐式那个,除非对方明确要求,否则不碰。

2. 从零在 Excel 里把心形画出来:完整操作链路

这一节是实操核心,我会把每一步的意图讲清楚,而不是只丢一串公式让你抄。因为画心形这件事,公式只是起点,真正决定成败的是角度采样密度、坐标转换顺序和图表类型选择这三个环节,任何一个出问题,出来的都是一团乱麻而不是心。

2.1 角度序列怎么生成:为什么不能只取 0 到 360 的整数

打开一张空白表,第一列放角度。这里有个关键细节:不要只填 0、1、2……360 这样的整数度。原因很简单,整数度只有 361 个点,画出来的曲线在弯曲处会明显折线化,尤其是心形上方那个尖角和下方两个圆弧的过渡位置,会看到一段一段的直线段,很难看。

正确做法是用更细的步长。我一般用 0.5 度或者更小,具体看你要多平滑。生成方式有两种:

  • 手动拖拽:A2 填 0,A3 填 0.5,选中两格往下拖到 720 行左右(0.5 度步长,360 度需要 721 个点)。
  • 公式生成:A2 填 0,A3 填=A2+0.5,然后往下填充。

如果你想让公式更“自解释”,可以在旁边加一列弧度值,因为 Excel 的三角函数默认吃弧度:

B2 = RADIANS(A2)

这样后面算 sin 和 cos 时直接用 B 列,避免在公式里反复嵌套 RADIANS,既清晰又不容易出错。这一步看起来多余,但当你后面要改公式、要排查问题时,多这一列能省很多事。

提示:步长不是越小越好。0.1 度会产生 3601 个点,图表渲染会变慢,而且视觉上跟 0.5 度几乎没区别。0.5 度是个性价比很高的选择。

2.2 极径与坐标转换:三列公式的先后顺序有讲究

角度准备好之后,接下来算极径 r 和直角坐标 x、y。假设 a 取 1,公式分别是:

r = 1 - SIN(B2) x = r * COS(B2) y = r * SIN(B2)

注意这里的顺序:先算 r,再算 x 和 y。因为 x 和 y 都依赖 r,如果你把 r 的公式直接展开塞进 x 里,公式会变成(1-SIN(B2))*COS(B2),虽然结果一样,但可读性差,而且一旦你想改 a 的值,得改两处。分开三列,改参数只动一列,这是工程习惯。

还有一个容易忽略的点:1 - SIN(B2)里的 1 其实就是 a。如果你想让心形大一点,把 1 改成 2,r 的范围就变成 0 到 4,图形整体放大。但要注意,x 和 y 会跟着放大,图表坐标轴会自动缩放,视觉大小不一定变,除非你手动固定坐标轴范围。这一点后面调图表时会再提。

填完第一行公式后,选中 r、x、y 三列的第一行,双击填充柄往下拉到底,整列数据就齐了。这时候你可以先扫一眼数据:r 应该在 0 到 2 之间波动,x 在 -1 到 1 附近,y 在 -2 到 1 附近。如果数值明显不对,多半是角度列没转弧度,或者公式引用错了列。

2.3 散点图选型:为什么必须是“带平滑线的散点图”

数据齐了,选中 x 和 y 两列(注意不要选角度列),插入图表。这里有个坑:Excel 的图表类型里有一堆看起来都能画曲线的选项,但只有**散点图里的“带平滑线和数据标记”或“带平滑线”**才是对的。

  • 折线图:会把 x 当成分类轴,按行号等距排列,画出来的形状是扭曲的,因为折线图不理解 x 的数值含义。
  • 散点图(无平滑线):点与点之间是直线连接,步长不够细时会有棱角。
  • 带平滑线的散点图:按 x、y 的真实数值定位,并用平滑曲线连接,出来的才是流畅的心形。

选对类型之后,第一眼看到的图可能还是歪的,别急,这通常是坐标轴比例问题。默认情况下 Excel 会根据数据范围自动设轴,x 和 y 的刻度间距往往不一致,导致心形被拉扁或拉长。解决办法是手动把横纵坐标轴的“主要刻度单位”调成接近的值,或者直接设置坐标轴的最小值、最大值,让 x 和 y 的显示范围大致对称。心形是各向同性的图形,轴比例一失衡,形状立刻走样。

2.4 去掉坐标轴和网格线:让它看起来像“画”而不是“表”

图出来之后,默认会带坐标轴、网格线、图例、标题,这些在数据分析里是好事,但画心形的时候全是干扰。我的处理顺序是:

  1. 删掉图例(只有一个系列,不需要)。
  2. 删掉网格线(横向纵向都删)。
  3. 隐藏坐标轴,或者把轴线和刻度标签都设为无。
  4. 删掉图表标题,或者改成一句你想说的话。
  5. 把绘图区背景设为无填充,图表区可以填个浅色底。

做完这几步,屏幕上就只剩一颗干净的心形曲线。这时候你可以调线条颜色,红色是最直白的,粗细调到 2 到 3 磅,视觉上更饱满。如果想要填充效果,散点图本身不支持直接填充闭合区域,得用别的技巧,这个后面单独说。

3. 图形调优:那些让心形“差点意思”的细节

公式对了、图出来了,很多人到这一步就停了,但成品往往差一口气——要么尖角太钝,要么左右不对称,要么线条在某处突然断掉。这些问题不是公式错,而是参数和渲染层面的细节没处理到位。这一节讲的就是这些“最后一公里”的东西。

3.1 尖角不够尖:正弦采样的固有特性与补救

极坐标式r = a(1-sinθ)画出来的心,上方那个尖角其实不是真正的尖点,而是一段曲率很大的圆弧。原因在于 sinθ 在 θ=90 度附近变化平缓,r 接近 0 但不是瞬间归零,所以顶部是圆钝的。这是公式本身的特性,不是 Excel 的锅。

如果你追求更锐利的尖角,有两个方向:

  • 换参数方程。前面那个x=16sin³t的式子,顶部尖角明显更锐,因为 sin³ 在 t=0 和 t=π 附近衰减更快。
  • 在极坐标基础上微调。把1-sinθ改成1-sinθ的某次幂,比如平方,能让顶部收得更紧,但形状会整体变瘦,需要试几次找平衡。

我实测下来,如果只是做个视觉小惊喜,极坐标的钝尖角完全够用,甚至显得更柔和。真要锐利,直接上参数方程,别在极坐标上硬调,性价比不高。

3.2 左右不对称的排查:从数据源头找问题

有人画出来的心是歪的,左半边和右半边不一样大。这种情况九成不是公式问题,而是数据或轴设置问题。排查顺序我一般这样走:

  1. 检查角度范围是否完整。必须是 0 到 360 度(或 0 到 2π),如果只填到 350 度,右边会缺一块。
  2. 检查 x 列公式是否统一。有时候拖拽填充时某一行的相对引用错了,导致个别点坐标异常。
  3. 检查坐标轴范围是否对称。如果 x 轴最小值是 -1.2、最大值是 1.0,图形就会整体左移,看起来不对称。
  4. 检查是否有重复或缺失的角度值。排序错乱会让曲线在某个点来回折返。

按这个顺序走一遍,基本都能定位。我遇到最多的是第 3 种,因为自动轴范围经常不是对称的,手动设成 -1.5 到 1.5 就正了。

3.3 线条断裂与锯齿:平滑度与采样密度的平衡

曲线中间出现断口,或者边缘毛毛躁躁,通常和两个因素有关:采样点太少,或者平滑线设置被关掉了。

采样密度前面说过,0.5 度步长是安全值。如果你为了文件小用了 2 度步长,弯曲处必然出现折角。另一个隐蔽原因是:散点图的“平滑线”选项在某些 Excel 版本里默认不开,需要手动勾选。位置在“设置数据系列格式”里的“线条”选项卡,勾上“平滑线”。

还有一种情况是数据里有空值或错误值,比如某行公式返回了 #DIV/0! 或 #VALUE!,曲线会在那个点断开。用筛选或条件格式把错误值找出来修掉就行。这类问题在手工填数据时特别常见,公式生成的话概率低很多。

4. 让心形“活”起来:填充、动画与场景化用法

一颗静态的红色心形曲线,看久了也就那样。真正让这个 Excel 技巧有价值的,是它能被改造成各种场景下的表达工具——填充成实心、加个渐变、甚至让它随数据变化。这一节讲几个我实际用过的扩展玩法,难度都不高,但效果提升明显。

4.1 实心填充的替代方案:面积图与形状叠加

散点图画的是线,想要实心的心,直接填充做不到。可行的替代路径有两条:

第一条是用面积图。把数据按 x 排序后,用 x 作横轴、y 作纵轴做面积图,曲线下方会被填充。但面积图填充的是“曲线到横轴之间”的区域,心形上下都有曲线,单靠一个面积图填不出完整的心。变通办法是做两个系列,上半和下半分别填充,颜色设成一样,视觉上拼成一颗心。这个做法有点绕,但确实能出效果。

第二条更简单:用形状叠加。先画好散点图的心形轮廓,然后插入一个心形自选图形,调整大小和位置盖在曲线上,填充红色、去掉边框,把散点图的线条设成白色或透明。这样看起来就是一颗实心红心,轮廓由自选图形提供,曲线藏在下面。缺点是自选图形的心形和函数曲线不完全重合,需要手动对齐,适合对精度要求不高的场合。

我个人更常用第二条,因为快,而且自选图形可以加阴影、加渐变,视觉表现力比纯曲线强。

4.2 用参数单元格驱动图形变化

这是我觉得最有意思的玩法:把 a 的值放到一个单独单元格里,公式引用这个单元格,改数字图形就变。比如 C1 填 1.5,r 的公式写成=$C$1*(1-SIN(B2)),改 C1 的值,心形整体缩放。

更进一步,可以把 a 做成一个滑块(开发工具里的滚动条控件),拖动滑块心形实时变大变小。这个在演示的时候很抓眼球,尤其是给不懂函数的人看,他们会觉得“这东西是活的”。实现上不难:插入表单控件里的滚动条,设置最小最大值和单元格链接,然后公式引用那个链接单元格就行。

注意:滚动条控件属于表单控件,不同版本 Excel 的位置略有差异,一般在“开发工具”选项卡里。如果找不到开发工具,需要在选项里把它调出来。这一步对新手稍有门槛,但网上教程很多,照着点一遍就会。

4.3 把心形嵌进实际场景:贺卡、报表点缀、教学演示

纯技术玩到这儿,最后得落到“这东西能干嘛”。我见过的靠谱用法有这么几类:

  • 节日贺卡:把心形图截图或直接放表格里,配一句祝福,导出 PDF 发人。比发表情包有诚意,而且显得你会点别人不会的。
  • 报表点缀:在一些轻松的汇报里,用小心形代替项目符号或者做页脚装饰,前提是场合允许,正式报告别这么干。
  • 教学演示:给学函数的人看“一个式子怎么变成一张图”,比干讲 sin 和 cos 直观得多。我见过有老师用这个当课堂开场,效果很好。

需要提醒的是,Excel 图表在复制到其他软件时,格式偶尔会跑偏,尤其是平滑线和透明填充。如果要做成图片发出去,建议直接在 Excel 里截图或者导出为图片,别指望复制粘贴到别处还一模一样。

5. 踩过的坑与几条实在的经验

写到这儿,公式和步骤都齐了,但真正动手时还是会遇到一些文档里不会写的问题。这一节我把这些年反复踩过的、以及身边人问得最多的几个坑列出来,都是些小地方,但每一个都能让人卡半天。

5.1 弧度与角度混用:最常见的“图形完全不对”

新手最容易犯的错,是直接把角度值喂给 SIN、COS。Excel 的三角函数只认弧度,你填 90,它算的是 90 弧度的正弦,结果跟心形毫无关系。表现就是图形乱七八糟,或者干脆是一条直线。

解决办法前面提过,加一列 RADIANS 转换。但还有个更隐蔽的变体:有人用了 RADIANS,但角度列本身是从 0 到 360 的整数,转换没问题,可他在公式里又手动乘了个 PI/180,等于转了两次,结果全错。这种错误很难一眼看出来,因为公式“看起来是对的”。我的习惯是转换只做一次,放在独立列,后面所有公式只引用那一列,绝不重复转换。

5.2 填充柄拖拽导致的引用错位

用双击填充柄快速填充公式时,Excel 会自动调整相对引用。大多数时候这是对的,但如果你的公式里混用了相对引用和绝对引用,拖拽后可能出现部分行引用错位。比如 a 值放在 C1,你写C1*(1-SIN(B2)),往下拖时 C1 会变成 C2、C3……全错。正确写法是$C$1*(1-SIN(B2)),把 a 锁死。

这个坑的排查方法是:随便点几行看公式,对比引用是否一致。如果发现某几行的引用列号在变,就是没加美元符号。养成习惯,凡是固定参数一律加$,能省掉大量返工。

5.3 图表复制到 Word 或 PPT 后变形

在 Excel 里调得好好的心形,复制到 Word 或 PPT 里经常变样:平滑线没了、颜色变了、比例被拉伸。原因是不同软件对图表对象的渲染方式不同,尤其是平滑曲线这种依赖插值的元素,跨软件经常丢失。

稳妥的做法是先转成图片再插入。在 Excel 里选中图表,复制,然后在目标软件里用“选择性粘贴”选图片格式,或者直接截图。牺牲一点可编辑性,换来的是所见即所得。如果确实需要在 PPT 里保持可编辑,那就在 PPT 里重新画一遍,别指望复制过去还能完美。

5.4 数据量过大导致卡顿

有人追求极致平滑,把步长设成 0.01 度,生成三万多个点。结果图表拖动一下卡三秒,文件体积也上去了。心形这种简单曲线,0.5 度步长已经足够平滑,肉眼分辨不出和 0.01 度的差别。数据量控制在几百到一千个点之间,是流畅度和效果的平衡点。

如果确实需要高密度数据做其他计算,建议把绘图用的数据和计算用的数据分开,图表只引用抽样后的一小部分,别让渲染拖累整个文件。

5.5 版本差异带来的小麻烦

不同版本的 Excel 在图表选项的位置上有些出入,比如“平滑线”勾选框,有的版本在“线条”选项卡下,有的在“标记”旁边。函数本身倒是通用,RADIANS、SIN、COS 这些老版本都有。如果照着教程找不到某个按钮,先确认版本,再在对应位置找,别怀疑自己操作错了。

另外,Mac 版 Excel 和 Windows 版在表单控件、图表渲染上也有细微差别,跨平台协作时留意一下。这些差异不影响核心流程,但会让“照着做却不一样”的情况发生,提前知道能少走弯路。

一颗 Excel 心形,说到底就是三列数据加一张散点图,技术上没有任何门槛。真正有意思的地方在于,它把“函数”这个平时冷冰冰的东西,变成了一个能看、能改、能送人的图形。我自己的体会是,每次给别人演示这个,对方第一反应都是“这也能行?”,然后就会问怎么做的——这种从惊讶到动手的过程,比图形本身更有价值。如果你也想试试,建议先从极坐标那版开始,跑通了再折腾参数方程和填充效果,一步一步来,别一上来就追求完美。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进