matplotlib散点图左下角点仅显示一半 保留xlim左边界为x最小值如何解决
解决方案
问题原因:你设置的xlim、ylim恰好对齐了左下角数据点的坐标值,散点标记本身存在固定像素尺寸,导致标记超出坐标轴范围的部分被默认裁剪,因此仅显示一半。以下两种方案均可满足**保留x轴左边界为min(x)**的要求:
方案1:关闭散点的坐标轴裁剪(无需修改坐标轴范围)
直接在scatter方法中添加clip_on=False参数,禁止坐标轴范围外的散点部分被裁剪,是最贴合需求的方案,修改后代码如下:
import numpy as np from scipy.stats import linregress import matplotlib.pyplot as plt c=np.array([0,0.2,0.4,0.8,1.2,1.6,2]) A=np.array([1e-4,0.0866,0.1735,0.3085,0.4233,0.5379,0.7731]) x,y=c,A reg=linregress(x,y) # 新增clip_on=False参数 plt.scatter(x,y, clip_on=False) predict=[i*reg.slope+reg.intercept for i in x] plt.plot(x,predict,linewidth=3) plt.xlim((min(x),max(x))) plt.ylim((min(y),max(y))) plt.xlabel(r'$\mathit{c} / \mathrm{ mol\cdot L^{-1}}$') plt.ylabel(r'$A$') plt.show()
方案2:调整y轴下边界留取少量余量
仅修改y轴下限,x轴左边界保持min(x)不变,通过给y轴下限设置微小的向下偏移量,给散点标记留出足够显示空间,通用适配代码如下:
# 其余代码不变,仅修改ylim设置 y_range = max(y) - min(y) plt.ylim(min(y) - 0.03 * y_range, max(y))
这里的0.03代表预留3%的y轴范围作为余量,可根据散点大小灵活调整数值。
内容的提问来源于stack exchange,提问作者Moeda Chaos
相关产品推荐
相关产品推荐

