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

Matplotlib如何设置x/y轴为相同0-10^5范围的等比例刻度?

异常原因

对数刻度坐标轴的有效取值范围是正实数,不支持将下限设为0——log(0)无数学定义(趋近负无穷),强行设置会直接导致刻度渲染错乱。另外你之前用的plt.xscale('log').xlim(0,10**5)链式调用写法本身也有问题:plt.xscale()没有返回值,无法直接接续调用xlim(),两类轴属性设置需要分开书写。

如果要实现0~10^5的对数刻度展示,只需将轴下限设为大于0的合理值即可:如果你的TPM数据最小值不小于1,下限设为1(对应log10刻度的0位点)就能匹配需求;如果数据存在小于1的TPM值,可把下限调整为你数据中的最小正数值(比如1e-1、1e-2)。

修正后可直接运行的代码
x = df2['bulk_TPM']
y = df2['scRNA_TPM']
plt.scatter(x,y,cmap='summer',
        edgecolor='black',linewidth=1, alpha=0.75)
plt.xscale('log')
plt.yscale('log')

# 设置对数轴范围,下限必须大于0,这里以常用的下限1为例,可根据实际数据调整
plt.xlim(1, 10**5)
plt.ylim(1, 10**5)

plt.title('bulk vs scRNA log10 TPM')
plt.xlabel('bulk_TPM')
plt.ylabel('scRNA_TPM')
可选优化

如果需要让坐标轴刻度固定显示为10⁰、10¹……10⁵的标准对数格式,可以额外添加如下代码:

from matplotlib.ticker import LogLocator
# 两个轴都设置以10为底的对数刻度,共6个刻度点(对应10^0到10^5)
plt.gca().xaxis.set_major_locator(LogLocator(base=10, numticks=6))
plt.gca().yaxis.set_major_locator(LogLocator(base=10, numticks=6))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:03:16