Plotly.py 二维直方图等高线图(2D Histogram Contour)完全指南:从 Plotly Express 密度等高线到 Graph Objects 高级定制
数据可视化数据分析【免费下载链接】plotly.pyThe interactive graphing library for Python :sparkles:项目地址https://gitcode.com/gh_mirrors/pl/plotly.py点击查看免费下载二维直方图等高线图2D Histogram Contour又称密度等高线图 density contour plot是 Plotly.py 中处理大规模散点数据、化解点重叠over-plotting问题的核心统计可视化方案。本文将基于仓库文档 doc/python/2d-histogram-contour.md系统讲解如何用 Plotly Express 的px.density_contour()快速绘制密度等高线以及如何用go.Histogram2dContour以 Graph Objects 方式实现颜色刻度、样式定制与子图布局并结合仓库源码深入剖析分箱、聚合函数与等高线着色等底层实现。什么是二维直方图等高线图二维直方图等高线图是一维直方图在二维平面上的推广它先把由x、y坐标指定的散点集合划分到二维分箱bins中再对每个箱子应用count计数或sum求和当提供z时等聚合函数从而得到用于计算等高线的数值场。最终呈现的效果与等高线图相似但其数值来源是数据点的密度统计而非显式给定的网格值。这种可视化以及与之相关的 2D Histogram 密度热力图通常用于处理 over-plotting 问题当数据量很大、以散点图直接展示时大量点会相互重叠、掩盖真实分布模式而把点聚合成密度场后分布的峰值与形状一目了然。使用 Plotly Express 绘制密度等高线Plotly Express 是 Plotly 的高层级、易用接口可处理多种形式的数据长格式、宽格式、numpy 数组等其px.density_contour()函数专门用于生成密度等高线图。最简示例以下代码使用 Plotly Express 内置的 tips小费数据集绘制消费金额total_bill与小费tip的联合密度import plotly.express as px df px.data.tips() fig px.density_contour(df, xtotal_bill, ytip) fig.show()从源码看density_contour()定义于 plotly/express/_chart_types.py它内部调用make_figure并以go.Histogram2dContour作为构造器同时注入一组默认 trace 配置trace_patchdict( contoursdict(coloringnone), histfunchistfunc, histnormhistnorm, nbinsxnbinsx, nbinsynbinsy, xbingroupx, ybingroupy, )其中contoursdict(coloringnone)意味着 Plotly Express 默认只画等高线而不填充颜色xbingroupx、ybingroupy则让主图与后续的边际图marginal plots共享同一分箱方案保证密度场与边际直方图严格对齐。添加边际分布图Marginal Plots可以通过marginal_x/marginal_y参数在图的边缘展示两个变量各自的一维分布。这里使用边际直方图histogram其他可选值为violin、box和rugimport plotly.express as px df px.data.tips() fig px.density_contour(df, xtotal_bill, ytip, marginal_xhistogram, marginal_yhistogram) fig.show()边际图由 plotly/express/_core.py 中的配套逻辑实现它会根据marginal_x的值决定是否追加go.Histogramtrace 并分配独立的x2/y2轴域还会在marginal_x为histogram时隐藏主图的网格线避免视觉干扰见 plotly/express/_core.py。仓库测试 tests/test_optional/test_px/test_marginals.py 专门覆盖了各类边际图的组合行为。分面与小面颜色密度等高线同样支持分面facet与离散颜色discrete color。下面示例按sex分面、按smoker着色import plotly.express as px df px.data.tips() fig px.density_contour(df, xtotal_bill, ytip, facet_colsex, colorsmoker) fig.show()注意当同时使用facet_row与marginal_x时Plotly Express 会依据 plotly/express/_core.py 的逻辑自动禁用边际图以避免布局冲突因此在设计图表时需要取舍分面与边际图。连续着色与等高线标注Plotly Express 密度等高线支持连续颜色colorscales。由于默认着色方式是none要得到填充式密度图需要在生成后通过update_traces把contours_coloring改为fill并可选地开启等高线数值标签import plotly.express as px df px.data.tips() fig px.density_contour(df, xtotal_bill, ytip) fig.update_traces(contours_coloringfill, contours_showlabels True) fig.show()使用count之外的其他聚合函数通过传入z值并指定histfunc密度等高线可以执行基本的聚合运算。下面示例使用鸢尾花Iris数据集展示以花瓣长度petal_length和花瓣宽度petal_width分组后、sepal_length的平均值分布import plotly.express as px df px.data.iris() fig px.density_contour(df, xpetal_length, ypetal_width, zsepal_length, histfuncavg) fig.show()histfunc的取值与底层go.Histogram2dContour.histfunc属性一致在 plotly/graph_objs/_histogram2dcontour.py 中声明为枚举[count, sum, avg, min, max]——分别表示对每个分箱内的数据点数计数、求和、取平均、取最小或取最大。z的值正是这些函数的输入。使用 Graph Objects 构建二维直方图等高线不借助 Plotly Express 时可以使用plotly.graph_objects中的go.Histogram2dContour类直接构建这类图形。该类的完整属性定义见 plotly/graph_objs/_histogram2dcontour.py。基础二维直方图等高线最基础的用法只需传入x和y两组随机点import plotly.graph_objects as go import numpy as np np.random.seed(1) x np.random.uniform(-1, 1, size500) y np.random.uniform(-1, 1, size500) fig go.Figure(go.Histogram2dContour( x x, y y )) fig.show()默认情况下数据会先做分箱再计算等高线。分箱策略可通过nbinsx/nbinsy分箱数量若显式给出xbins.size则被忽略、xbins/ybins由start、end、size定义的分箱区间以及兼容旧版的autobinx/autobiny来调节后两者属于兼容性开关源码注释明确指出现代用法中只需设置xbins/ybins即可autobinx/autobiny仅为接受历史遗留写法而保留见 plotly/graph_objs/_histogram2dcontour.py。自定义颜色刻度Colorscale通过colorscale属性可以选择内置颜色刻度如Blues、Jet等并用reversescaleTrue反转色序import plotly.graph_objects as go import numpy as np x np.random.uniform(-1, 1, size500) y np.random.uniform(-1, 1, size500) fig go.Figure(go.Histogram2dContour( x x, y y, colorscale Blues )) fig.show()颜色映射的数值域由zmin/zmax控制两者需成对设置单位与z相同zmid则可在保持zmin/zmax不动的情况下移动颜色域的中间点。reversescaleTrue时zmin对应色带末尾的颜色、zmax对应色带开头的颜色见 plotly/graph_objs/_histogram2dcontour.py。密度场的数据归一化方式还可由histnorm控制其枚举取值为原始计数、percent、probability、density、probability density分别对应百分比、概率、密度总面积等于样本数与概率密度总面积等于 1等不同语义见 plotly/graph_objs/_histogram2dcontour.py。完整样式定制下面示例在Jet色带上叠加等高线标注并自定义 hover 标签样式import plotly.graph_objects as go import numpy as np x np.random.uniform(-1, 1, size500) y np.random.uniform(-1, 1, size500) fig go.Figure(go.Histogram2dContour( x x, y y, colorscale Jet, contours dict( showlabels True, labelfont dict( family Raleway, color white ) ), hoverlabel dict( bgcolor white, bordercolor black, font dict( family Raleway, color black ) ) )) fig.show()其中contours子对象的完整属性在 plotly/graph_objs/histogram2dcontour/_contours.py 中定义核心参数包括coloring等高线着色方式枚举取值为fill在每两条等高线之间均匀填充、heatmap等高线间应用热力图渐变填充、lines只给等高线本身着色与none不着色Plotly Express 默认值showlabels是否显示每条等高线上的数值标签labelfont等高线标签的字体设置family、size、color未指定部分继承layout.fontstart/end等高线起始与终止层级值要求end严格大于startsize等高线层级之间的间距showlines是否显示等高线本身仅在coloring为fill时生效。带边际直方图的子图布局Graph Objects 方式可以自由组合多个 trace。下面示例把Histogram2dContour与原始散点、两个方向的边际直方图组合进同一画布主图占据x/y轴域[0, 0.85]两个边际直方图分别挂在x2/y2轴域[0.85, 1]import plotly.graph_objects as go import numpy as np t np.linspace(-1, 1.2, 2000) x (t**3) (0.3 * np.random.randn(2000)) y (t**6) (0.3 * np.random.randn(2000)) fig go.Figure() fig.add_trace(go.Histogram2dContour( x x, y y, colorscale Blues, reversescale True, xaxis x, yaxis y )) fig.add_trace(go.Scatter( x x, y y, xaxis x, yaxis y, mode markers, marker dict( color rgba(0,0,0,0.3), size 3 ) )) fig.add_trace(go.Histogram( y y, xaxis x2, marker dict( color rgba(0,0,0,1) ) )) fig.add_trace(go.Histogram( x x, yaxis y2, marker dict( color rgba(0,0,0,1) ) )) fig.update_layout( autosize False, xaxis dict( zeroline False, domain [0,0.85], showgrid False ), yaxis dict( zeroline False, domain [0,0.85], showgrid False ), xaxis2 dict( zeroline False, domain [0.85,1], showgrid False ), yaxis2 dict( zeroline False, domain [0.85,1], showgrid False ), height 600, width 600, bargap 0, hovermode closest, showlegend False ) fig.show()这段示例同样展示了 Graph Objects 方式的灵活性domain控制各轴在画布上的占用比例hovermodeclosest使鼠标悬停时优先高亮最近的数据点bargap0让边际直方图条与条之间无缝衔接。整个布局与 Plotly Express 自动生成的边际图在结构上一致——这也印证了 plotly/express/_core.py 中把Histogram2dContour与Histogram2d一并作为支持边际图处理的笛卡尔 trace 的实现。使用要点小结数据量大的场景优先选密度等高线相比散点图它能把数万个点的分布压缩为清晰的密度场避免 over-plotting 掩盖模式快速出图用px.density_contour一行代码完成分箱与等高线绘制并天然支持分面、离散颜色、边际图和聚合函数count/sum/avg/min/max精细控制用go.Histogram2dContour可自定义colorscale、zmin/zmax/zmid、nbinsx/nbinsy与xbins/ybins以及contours的coloring、start/end/size、showlabels等全部细节聚合与归一化语义要分清histfunc决定每个分箱的取值方式histnorm决定密度场的归一化方式两者配合可得到计数、均值、概率密度等不同语义的分布图边际图共享分箱Plotly Express 通过xbingroup/ybingroup让主图与边际直方图使用同一分箱方案保证一维与二维分布严格一致。参考资料本文主体来源doc/python/2d-histogram-contour.mdPlotly Express 实现plotly/express/_chart_types.pydensity_contour及make_docstring参数文档底层 trace 属性plotly/graph_objs/_histogram2dcontour.pyhistfunc、histnorm、nbinsx/nbinsy、xbins/ybins、colorscale、zmin/zmax/zmid等等高线子对象plotly/graph_objs/histogram2dcontour/_contours.pycoloring、start/end/size、showlabels、labelfont、showlines边际图与分箱联动逻辑plotly/express/_core.pymarginal_x处理、xbingroup/ybingroup注入相关测试tests/test_optional/test_px/test_marginals.py、tests/test_optional/test_px/test_px.py赞分享数据可视化数据分析【免费下载链接】plotly.pyThe interactive graphing library for Python :sparkles:项目地址https://gitcode.com/gh_mirrors/pl/plotly.py点击查看免费下载相关推荐终极Android徽章解决方案BadgeView让MaterialDesign风格通知轻松实现终极Android徽章解决方案BadgeView让MaterialDesign风格通知轻松实现 BadgeView是一款专为Android开发者打造的轻量级徽数据可视化数据分析Plotly.py 直方图Histogram完全指南从 Plotly Express 到 go.Histogram 的统计可视化实战Plotly.py 直方图Histogram完全指南从 Plotly Express 到 go.Histogram 的统计可视化实战 本篇技术指南以仓库文数据可视化数据分析Plotly.py 散点图与折线图完全指南从 Plotly Express 到 go.Scatter 的实战详解Plotly.py 散点图与折线图完全指南从 Plotly Express 到 go.Scatter 的实战详解 导读 散点图Scatter Plot与折数据可视化数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

文华财经到富途牛牛:跨平台指标迁移实战指南

文华财经到富途牛牛:跨平台指标迁移实战指南

简介:面向股票与期货交易者的文华财经、富途牛牛技术指标公式源码包,内含VAR1至VARK2等变量的完整计算逻辑,涵盖高低价差、收盘价与高低价关系、移动平均线等核心分析方法,适用于技术分析与量化策略研究。包体共3个文件&#xff0…

2026/9/22 4:33:24 阅读更多 →
Turborepo CI/CD 优化实战:基于 --affected 的增量流水线、Git 范围过滤与缓存加速

Turborepo CI/CD 优化实战:基于 --affected 的增量流水线、Git 范围过滤与缓存加速

Turborepo CI/CD 优化实战:基于 --affected 的增量流水线、Git 范围过滤与缓存加速 【免费下载链接】turbo Build system optimized for JavaScript and TypeScript, written in Rust 项目地址: https://gitcode.com/gh_mirrors/tu/turbo Turborepo 是面向 J…

2026/9/20 22:58:26 阅读更多 →
开放研究实践指南:从实验日志到可复现的完整过程

开放研究实践指南:从实验日志到可复现的完整过程

“OpenResearch”这个词,最近在技术圈里出现的频率越来越高。你可以把它理解成“开放研究”,也可以理解成“开放式做研究的方法论”。坦白讲,我一开始对这类时髦词是有点免疫的——每个季度都会冒出几个概念,最后多数都会变成PPT里…

2026/9/20 22:58:26 阅读更多 →

最新新闻

面试被问淘宝产品上架逻辑懵了?一文搞懂核心流程与底层原理

面试被问淘宝产品上架逻辑懵了?一文搞懂核心流程与底层原理

面试被问淘宝产品上架逻辑懵了?一文搞懂核心流程与底层原理 上周刚结束一场大厂后端面试,面试官轻描淡写地甩出一句:“说说淘宝商品从创建到上架,后台到底发生了什么?”我愣了。脑子里瞬间一片空白,只能磕磕绊绊地答出“调用API”、“存数据库”这种…

2026/9/22 4:33:57 阅读更多 →
3天搭好设计管理系统避坑指南

3天搭好设计管理系统避坑指南

3天搭好设计管理系统避坑指南 配置环境就卡半天?依赖版本冲突、样式加载失败、组件状态不同步,这些坑我全踩过。这份避坑指南带你从零搭建一个轻量级设计管理系统,不整虚的,直接上手。 项目目标:别想太复杂,先跑通核心链路…

2026/9/22 4:33:57 阅读更多 →
数量英文完整示例:3个实战项目攻克翻译难题

数量英文完整示例:3个实战项目攻克翻译难题

数量英文完整示例:3个实战项目攻克翻译难题 看了一堆教程还是不会写项目?这是很多刚接触编程或自然语言处理(NLP)的朋友最真实的写照。你背熟了单词,理解了语法,但一旦要把“3个苹果”这种带有数量关系的英文文本转换成结构化数据,或者在电商系统…

2026/9/22 4:33:57 阅读更多 →
3分钟搞定最近中文字幕视频2019一页实战项目避坑指南

3分钟搞定最近中文字幕视频2019一页实战项目避坑指南

3分钟搞定最近中文字幕视频2019一页实战项目避坑指南 看着满屏红色的 StackTrace,是不是感觉脑子像被塞进了水泥?别慌,这就像工地上的脚手架没搭稳,看着吓人,其实只要找到受力点,一推就直。很多新手在跑这个名为“最近中文字幕视频20…

2026/9/22 4:33:57 阅读更多 →
星之海洋2性能优化踩坑实录:3个致命Bug让你少熬3夜

星之海洋2性能优化踩坑实录:3个致命Bug让你少熬3夜

星之海洋2性能优化踩坑实录:3个致命Bug让你少熬3夜 版本升级后 API 全变了,代码跑起来却慢得像蜗牛。很多老哥在重构星之海洋2相关模块时,第一反应是“怎么这么卡”,第二反应是“是不是我电脑不行”。别怪硬件,问题出在你没看懂新版底层逻辑…

2026/9/22 4:33:57 阅读更多 →
5种方法解决img文件怎么打开,附最佳实践避坑指南

5种方法解决img文件怎么打开,附最佳实践避坑指南

5种方法解决img文件怎么打开,附最佳实践避坑指南 刚学完代码,拿到一个 .img 文件却打不开?别慌,这不是你的错。 很多开发者都栽在这上面: 学会语法却不知怎么搭项目 。你以为 img 就是网页里那个 <img>…

2026/9/22 4:32:57 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →