ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Altair Circle 标记完全指南:mark_circle 用法、size 属性与散点图实战

Altair Circle 标记完全指南:mark_circle 用法、size 属性与散点图实战 数据可视化【免费下载链接】altairDeclarative visualization library for Python项目地址https://gitcode.com/gh_mirrors/al/altair点击查看免费下载导读本文围绕 Altair声明式 Python 可视化库中circle标记展开系统讲解mark_circle()的用法、circle标记与point标记的区别、专用属性size的语义并结合仓库源码与真实示例给出可复跑的散点图代码。读完本文你将掌握如何用mark_circle()快速绘制散点图、气泡图理解其填充与尺寸的底层行为并能进一步结合size/color/tooltip等编码通道做出更丰富的可视化。1. circle 标记是什么Altair 官方文档在 circle.rst 中开宗明义地定义circle标记与point标记相似区别在于(1)shape的值永远被固定为circle(2) 默认情况下它们是填充filled的。这句话点出了circle的本质——它是point的一种“特化形式”。散点图中最常见的用法就是把一个数据点画成一个实心圆点这正是circle标记的定位。与它形成对照的是 point.rst 中描述的point标记默认情况下point标记只有边框、内部是透明的可以通过设置filledTrue来创建填充的点。也就是说对比项point标记circle标记shape 取值可自由指定circle、square、cross、diamond、triangle 等固定为circle默认填充不填充仅描边填充典型用途需要形状编码或描边样式通用散点图、地图上的地理点这一默认行为在 Vega-Lite 模式定义中也有据可查。core.py 中对filled属性写道默认值为point、line、rule标记以及 graticule 数据源的geoshape标记为false其余情况为true。circle不在此列因此其filled默认值为true即实心圆点。2. circle 标记的属性体系一个circle标记定义可以包含所有 标准标记属性如color、opacity、stroke、tooltip等外加以下这个专有属性2.1 专有属性size属性类型说明size数值 / 表达式引用ExprRef标记的默认尺寸size的确切语义在源码的MarkDef模式定义core.py中有详细注释对于point/circle/squaresize表示标记的像素面积。注意该值设置的是符号的面积其边长会随该值的平方根增长。 对于bar它表示条带的像素宽度对于text它表示字体大小像素。这是一个容易踩坑的细节size不是“半径”也不是“直径”而是面积。若想让圆点看起来大一倍需要把size乘以 4面积增大为 4 倍、直径才增大为 2 倍而不是乘以 2。由于面积与边长是平方根关系size的数值跨度往往较大常见取值从几到几百。2.2 标准标记属性除size外circle同样支持MarkDef中定义的标准属性例如依据 core.py 的 MarkDef 文档color默认填充颜色默认值#4682b4fill/stroke的优先级高于coloropacity整体透明度fillOpacity填充透明度默认1stroke/strokeWidth/strokeOpacity描边颜色与宽度tooltip是否显示提示信息可传True或字段定义cursor、href、aria等辅助属性。这些属性既可以作为关键字参数直接传入mark_circle()也可以在encode()中映射到数据字段实现按数据取值动态变化。3. 源码级解析mark_circle 是如何实现的mark_circle()是Chart对象上的方法定义在 mixins.pyuse_signature(_MarkDef) def mark_circle(self, **kwds: Any) - Self: Set the charts mark to circle (see :class:MarkDef). copy self.copy(deepFalse) # type: ignore if any(val is not Undefined for val in kwds.values()): copy.mark core.MarkDef(typecircle, **kwds) else: copy.mark circle return copy从源码可以看到两条实现事实浅拷贝非原地修改方法返回的是当前图表对象的一份浅拷贝self.copy(deepFalse)并在这份拷贝上设置mark因此不会污染原图表对象也支持链式调用。两种底层表示当没有传入任何标记属性如mark_circle()时mark被设置为字符串circle——Vega-Lite 的最简简写形式当传入了任意属性如mark_circle(size50)时mark被构造为core.MarkDef(typecircle, **kwds)模式定义对象。也就是说mark_circle(size50, colorsteelblue)最终会被序列化为{mark: {type: circle, size: 50, color: steelblue}}这样的 Vega-Lite 规范。这种“无参用简写、有参用 MarkDef”的设计保证了生成规范的精简与可读。顺带一提mark_circle与mark_point、mark_square等共享同一套_MarkDef签名机制use_signature(_MarkDef)因此 IDE 中会得到完整的参数提示类型上则统一走 core.py 的MarkDef模式包装类。4. 实战用 circle 标记绘制散点图原文档给出的最小可运行示例是汽车数据集上的散点图。为了与原文档保持一致且保证可复现建议使用当前仓库的 datasets 接口获取数据 URLimport altair as alt from altair.datasets import data source data.cars.url alt.Chart(source).mark_circle().encode( x(Horsepower:Q), y(Miles_per_Gallon:Q), )代码要点说明data.cars.url返回cars数据集的远程 URL字符串无需本地文件当前仓库的 datasets 模块altair/datasets/init.py支持data.cars()直接加载为 DataFrame、data.cars.url获取地址并可指定enginepolars/pandas/pyarrow等后端x与y使用带类型后缀的简写字段描述Horsepower:QQ 表示定量/连续数据与Miles_per_Gallon:Qmark_circle()不传任何参数此时底层mark会被简写为字符串circle。运行后即可得到一张“马力Horsepower对每加仑英里数Miles_per_Gallon”的散点图每个观测点渲染为一个默认填充的实心圆点。4.1 指定 size 属性若想控制圆点大小直接传入size像素面积alt.Chart(source).mark_circle(size100).encode( xHorsepower:Q, yMiles_per_Gallon:Q, )仓库测试中也有同样的用法例如 deviation_ellipses.py 中的mark_circle(size50, tooltipTrue)。4.2 结合 size 通道绘制气泡图把第三个字段映射到size编码通道散点图就升级为气泡图alt.Chart(source).mark_circle().encode( xHorsepower:Q, yMiles_per_Gallon:Q, sizeAcceleration:Q, )此时圆点面积随Acceleration字段取值连续变化这与mark_circle(size100)的固定尺寸不同前者是数据驱动的编码通道后者是标记的固定默认值。仓库中的 gapminder_bubble_plot.py 正是这类气泡图的完整范例。4.3 叠加颜色与透明度circle支持所有标准标记属性例如按分类字段着色、设置透明度以便观察重叠点alt.Chart(source).mark_circle(opacity0.6).encode( xHorsepower:Q, yMiles_per_Gallon:Q, colorOrigin:N, )其中opacity0.6作为标记属性固定透明度colorOrigin:N将产地名义型字段映射为颜色。在点密度高的散点图中适度降低透明度能有效缓解点与点的遮挡问题仓库示例 interval_selection_map_quakes.py 就使用了mark_circle(opacity0.35, tooltipTrue)。5. circle 与 point、square 的取舍circle vs point需要保持圆形、且想要默认填充时优先用circle需要给不同类别分配不同形状如正方形、三角形、菱形时必须用point并映射shape通道参考 point.rst 中的形状列表。circle vs square二者是“同构”关系——都固定形状、默认填充唯一区别是几何形状本身。mixins.py 中mark_square与mark_circle的实现完全对称均按“无参简写字符串、有参构造 MarkDef”的规则生成。选择依据纯粹是视觉语义。6. 延伸circle 在地理可视化中的典型应用由于circle固定为圆形且默认填充它常被用来渲染地理点。在 point.rst 的 Geo Point 示例中mark_circle配合longitude/latitude通道与投影即可在地图上标出机场位置import altair as alt from altair.datasets import data airports data.airports() states alt.topo_feature(data.us_10m.url, featurestates) background alt.Chart(states).mark_geoshape( filllightgray, strokewhite ).properties(width500, height300).project(albersUsa) points alt.Chart(airports).mark_circle( size10, colorsteelblue, ).encode( longitudelongitude:Q, latitudelatitude:Q, tooltip[name, city, state], ) background points这里mark_circle(size10, colorsteelblue)固定了圆点面积与颜色tooltip展示机场信息background points则利用图层叠加把圆点绘制在美国州界底图之上。仓库中的 airport_connections.py 与 groupby-map.py 也展示了mark_circle在地理/分组地图中的更多组合方式。7. 小结circle是point的特化shape固定为circle默认填充适合散点图与地理点图专有属性size表示像素面积而非半径调整视觉大小需按平方关系换算mark_circle()无参时生成简写字符串circle有参时构造MarkDef(typecircle, **kwds)见 mixins.py通过size/color/opacity/tooltip等编码通道可将散点图扩展为气泡图、着色散点图与交互式地图点层仓库 tests/examples_arguments_syntax 目录下有大量可直接借鉴的完整示例。若需进一步了解标记属性的完整清单可查阅 marks 索引文档 与 core.py 中MarkDef的完整参数文档。赞分享数据可视化【免费下载链接】altairDeclarative visualization library for Python项目地址https://gitcode.com/gh_mirrors/al/altair点击查看免费下载相关推荐Lucide React 图标尺寸调整完全指南size 属性、CSS 与 Tailwind 实战Lucide React 图标尺寸调整完全指南size 属性、CSS 与 Tailwind 实战 本篇指南聚焦 Lucide 官方 React 图标库 luc文档教程Lucide Solid 图标尺寸控制完全指南size 属性与 CSS 缩放实战Lucide Solid 图标尺寸控制完全指南size 属性与 CSS 缩放实战 本文面向使用 Solid 框架的开发者系统讲解 Lucide 图标库So前端UI组件设计系统Bokeh 散点图Scatter Plots完全指南内置标记、自定义标记与图像标记Bokeh 散点图Scatter Plots完全指南内置标记、自定义标记与图像标记 导读 散点图是数据可视化中最基础也最常用的图形之一。Bokeh 提供了数据可视化图表库上一篇Claudia MCP服务器管理统一配置Model Context Protocol下一篇3步搞定Wan2.2视频生成模型本地部署AI视频创作一键开启创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表