You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas/Matplotlib中为Hexbin颜色条设置自定义刻度与标签

嘿,我来帮你搞定这个问题!在Pandas结合Matplotlib绘制Hexbin图时,自定义颜色条的刻度和标签其实并不复杂,咱们分两种常见场景来一步步说:

场景1:用Pandas的plot.hexbin()直接绘制

Pandas的绘图接口封装了Matplotlib,用起来很方便,但要注意它的返回值细节:

首先咱们先准备示例数据,方便演示:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 生成随机示例数据
np.random.seed(42)
df = pd.DataFrame({
    'x': np.random.normal(0, 1, 10000),
    'y': np.random.normal(0, 1, 10000)
})

接下来绘制Hexbin图,这里要记得加上return_colorbar=True,这样才能拿到颜色条对象:

# 绘制hexbin,返回轴对象和颜色条对象的元组
ax_tuple = df.plot.hexbin(x='x', y='y', gridsize=20, cmap='viridis', return_colorbar=True)
ax, cbar = ax_tuple

现在就可以自定义颜色条的刻度和标签了!比如我们想把刻度分成几个区间,配上自定义文字标签:

# 自定义刻度位置(要在颜色条的数值范围内,不然显示异常)
custom_ticks = [0, 50, 100, 150, 200]
# 对应每个刻度的标签
custom_labels = ['稀疏', '较少', '中等', '密集', '极密']

# 给颜色条设置刻度和标签
cbar.set_ticks(custom_ticks)
cbar.set_ticklabels(custom_labels)

# 还可以给颜色条加个清晰的标题
cbar.set_label('每箱数据点数量')

plt.show()
场景2:直接用Matplotlib的plt.hexbin()绘制

如果你需要更灵活的控制,直接用Matplotlib原生方法也很简单:

同样先准备数据:

np.random.seed(42)
x = np.random.normal(0, 1, 10000)
y = np.random.normal(0, 1, 10000)

绘制Hexbin并获取颜色条:

# 绘制hexbin,返回Hexbin对象
hb = plt.hexbin(x, y, gridsize=20, cmap='viridis')
# 生成颜色条并绑定到Hexbin对象
cbar = plt.colorbar(hb)

然后自定义刻度和标签,和上面的逻辑一样:

# 自定义刻度和标签
custom_ticks = [0, 40, 80, 120, 160, 200]
custom_labels = ['0', '40+', '80+', '120+', '160+', '200+']

cbar.set_ticks(custom_ticks)
cbar.set_ticklabels(custom_labels)
cbar.set_label('点数')

plt.xlabel('X值')
plt.ylabel('Y值')
plt.show()
一些小提醒
  • 自定义刻度前,可以先用cbar.get_clim()查看当前颜色条的数值范围,确保你的custom_ticks在这个范围内,避免刻度显示异常;
  • 标签可以是任意字符串,比如带单位、中文描述都没问题,完全根据你的需求来;
  • 如果你的Hexbin图颜色映射是基于其他统计量(比如均值、总和),只需要调整custom_ticks对应的值就行,逻辑是一样的。

内容的提问来源于stack exchange,提问作者bicarlsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:08:48