对于小数据值,Matplotlib散点图轴自动缩放失败

时间:2016-06-04 19:47:25

标签: python matplotlib

使用Matplotlib的scatterplot时,有时自动缩放有效,有时则无效。

我该如何解决?

如错误报告中提供的示例,此代码有效:

plt.figure()
x = np.array([0,1,2,3])
x = np.array([2,4,5,9])
plt.scatter(x,y)

但是当使用较小的值时,缩放无法工作:

plt.figure()
x = np.array([0,1,2,3])
x = np.array([2,4,5,9])
plt.scatter(x/10000,y/10000)

编辑:可以找到一个示例here。我没有在问题中指定具体原因,因为在遇到错误时,导致错误的原因并不明显。另外,我已经在我自己的答案中指定了解决方案和原因。

1 个答案:

答案 0 :(得分:1)

至少在Matplotlib 1.5.1中,有一个错误,自动缩放失败的小数据值,如报告here

解决方法是使用.set_ylim(bottom,top)documentation)手动设置数据限制(在此示例中为y轴,设置x轴,使用.set_xlim(left,right)

要自动查找令人赏心悦目的数据限制,可以使用以下伪代码:

def set_axlims(series, marginfactor):
    """
    Fix for a scaling issue with matplotlibs scatterplot and small values.
    Takes in a pandas series, and a marginfactor (float).
    A marginfactor of 0.2 would for example set a 20% border distance on both sides.
    Output:[bottom,top]
    To be used with .set_ylim(bottom,top)
    """
    minv = series.min()
    maxv = series.max()
    datarange = maxv-minv
    border = abs(datarange*marginfactor)
    maxlim = maxv+border
    minlim = minv-border

    return minlim,maxlim