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

如何在matplotlib子图中设置散点图colormap的clim范围?

解决Matplotlib散点图颜色映射范围设置无效的问题

当你用scatter()基于percent_mito给散点着色,尝试用axs[0].set_clim(0,0.1)设置颜色映射范围却无效时,核心原因是:scatter生成的颜色映射是绑定在PathCollection对象上的,而非坐标轴本身。你需要直接对这个散点对象操作,或者在调用scatter时直接指定范围。

两种有效解决方法:

方法1:调用scatter时直接指定vmin和vmax参数

这是最简洁的方式,直接在scatter函数中添加vmin和vmax参数,替代后续的set_clim操作:

fig, axs = plt.subplots(1,2, figsize=(10,4.5))

# 直接在scatter中指定颜色范围vmin=0, vmax=0.1
axs[0].scatter(my_data.obs['n_counts'], my_data.obs['n_genes'],
 c=my_data.obs['percent_mito'], cmap='viridis', s=2, vmin=0, vmax=0.1)

axs[0].set_xlabel('n_counts')
axs[0].set_ylabel('n_genes')

axs[0].axhline(500, color='red')
axs[0].axvline(1000, color='red')
axs[0].axvline(35000, color='red')


axs[1].scatter(my_data.obs['n_genes'], my_data.obs['percent_mito'], s=2)
axs[1].set_xlabel('n_genes')
axs[1].set_ylabel('percent_mito')
axs[1].axhline(10, color='red')
axs[1].axvline(500, color='red')


plt.tight_layout()

方法2:保存scatter返回对象,再调用set_clim

如果需要后续动态调整颜色范围,可以先把scatter的返回值保存为变量,再对这个变量调用set_clim():

fig, axs = plt.subplots(1,2, figsize=(10,4.5))

# 保存scatter返回的PathCollection对象
scatter_obj = axs[0].scatter(my_data.obs['n_counts'], my_data.obs['n_genes'],
 c=my_data.obs['percent_mito'], cmap='viridis', s=2)
# 对散点对象设置颜色范围
scatter_obj.set_clim(0, 0.1)

axs[0].set_xlabel('n_counts')
axs[0].set_ylabel('n_genes')

axs[0].axhline(500, color='red')
axs[0].axvline(1000, color='red')
axs[0].axvline(35000, color='red')


axs[1].scatter(my_data.obs['n_genes'], my_data.obs['percent_mito'], s=2)
axs[1].set_xlabel('n_genes')
axs[1].set_ylabel('percent_mito')
axs[1].axhline(10, color='red')
axs[1].axvline(500, color='red')


plt.tight_layout()

补充说明

ax.set_clim()作用的是坐标轴默认的颜色映射范围,但当你用scatter的c参数指定颜色数据时,Matplotlib会为这个散点集合单独创建颜色映射,因此需要对散点对象本身设置范围,才能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:31:01