我希望在顶部创建一个带有散点图的底图,其中点的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,但我认为这样做不会很好,因为我还有几个元素可以添加相同的问题。有什么想法吗?
答案 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
对tile
数据集的推广很简单:您需要n
纬度和经度repeat
次而不是2次,然后您需要为每个数据集添加一种颜色{{1 }}