使用matplotlib散点图绘制负值

时间:2019-08-10 21:16:21

标签: python python-3.x numpy matplotlib

我想在地球的全球地图上绘制与6个不同数据集相对应的散点。问题在于这些数量中的一些具有负值,并且它们不会出现在地图中。我试图通过采用数据的绝对值并将其乘以(或采用其功效)某些因素来克服此问题,但是似乎没有任何方法可以按照我想要的方式工作。问题在于数据集的范围非常不同。理想情况下,我希望它们所有人都具有相同的规模,以便使所有事情都井井有条,但是我不知道该怎么做。

我创建了一些综合数据来说明此问题

[??]

enter image description here

正如您在地图上看到的那样,未显示负面数据。我希望它们全部出现在地图中,并且所有散点图在各自的范围内具有相同的比例。谢谢!

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试将数据集映射到点大小。显然,您不能使用负号的点,这样就行不通了。

相反,您需要将数据集归一化到严格的正范围内,并使用这些归一化的值作为size参数。一种简单的方法是使用matplotlib.colors.Normalize(vmin, vmax),它允许您将间隔[vmin,vmax]中的任何值映射到间隔[0,1]。

如果要为所有数据集共享比例,请首先找到全局最小值和最大值,然后使用它来实例化归一化,然后在绘制时对每个数据集进行归一化:

datasets = [VarReTx,VarReTy,VarImTx,VarImTy,eTx,eTx]

min_val = min([d.min() for d in datasets])
max_val = max([d.max() for d in datasets])

norm = matplotlib.colors.Normalize(vmin=min_val, vmax=max_val)
plt.scatter(x,y,s=norm(VarReTx)*100) # choose appropiate scaling factor instead of 100 to get nicely sized dots