zorder的底图散点图由大小决定

时间:2016-11-11 21:50:08

标签: python scatter-plot matplotlib-basemap z-order

我希望在顶部创建一个带有散点图的底图,其中点的zorder由每个单独点的大小决定,这样任何点都不会被另一个点完全覆盖。 (理想的最终结果看起来像是靶心。)

我们说我有以下代码:

Ca_data = array([0.088, 0.094, 0.097, 0.126, 0.112, 0.092, 0.076, 0.105])
SO4_data = array([0.109, 0.001, 0.001, 0.007, 0.214, 0.005, 0.008, 0.559])
longitude = linspace(-101, -100, 8)
latitude = linspace(34.5, 35, 8)

m=Basemap(llcrnrlon=-101,llcrnrlat=34.5,urcrnrlon=-100,urcrnrlat=35,resolution='c', epsg=4326)
m.arcgisimage(server='http://server.arcgisonline.com/ArcGIS', service='ESRI_Imagery_World_2D', xpixels=1500, ypixels=1500, zorder=1)
m.scatter(longitude, latitude, latlon=True, s=6000*Ca_data,c='r',marker="o",label='Ca')
m.scatter(longitude, latitude, latlon=True, s=6000*SO4_data,c='b',marker="o",label='SO4')
plt.show()

实际上,只要SO4大于Ca,我就会看到SO4。我考虑进入并在每一行添加一个zorder,但我认为这样做不会很好,因为我还有几个元素可以添加相同的问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我能看到如何做到这一点的唯一方法是一次绘制两个数据集。否则,无法在第一个数据集之上绘制第二个数据集。

大部分内容都可以轻松完成,唯一的问题是label scatter kwarg array_like。我们可以为scatter提供元素(import numpy as np from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt Ca_data = np.array([0.088, 0.094, 0.097, 0.126, 0.112, 0.092, 0.076, 0.105]) SO4_data = np.array([0.109, 0.001, 0.001, 0.007, 0.214, 0.005, 0.008, 0.559]) longitude = np.linspace(-101, -100, 8) latitude = np.linspace(34.5, 35, 8) # this is the new part: concatenate all the data plotlon = np.tile(longitude,2) plotlat = np.tile(latitude,2) plotdat = np.concatenate((6000*Ca_data,6000*SO4_data)) # sizes cdat = np.repeat(('r','b'),longitude.size) # colors # determine reverse sorting order inds = np.argsort(plotdat)[::-1] plt.figure() m = Basemap(llcrnrlon=-101,llcrnrlat=34.5,urcrnrlon=-100,urcrnrlat=35,resolution='c', epsg=4326) m.arcgisimage(server='http://server.arcgisonline.com/ArcGIS', service='ESRI_Imagery_World_2D', xpixels=1500, ypixels=1500, zorder=1) # use a single scatter() call, with ordered-concatenated data m.scatter(plotlon[inds], plotlat[inds], latlon=True, s=plotdat[inds],c=cdat[inds],marker="o") # label has been removed! plt.show() )尺寸和颜色,但我们不能使用标签。尽管如此,由于数据的可视化更为重要,我将沿着这条路走下去,在以后黑客攻击与标签相关的问题(主要是传说):

n

ASCII value

tile数据集的推广很简单:您需要n纬度和经度repeat次而不是2次,然后您需要为每个数据集添加一种颜色{{1 }}