Python:如何在cartopy中绘制地图上特定点的散点图?

Python:如何在cartopy中绘制地图上特定点的散点图?,python,matplotlib,plot,jupyter-notebook,cartopy,Python,Matplotlib,Plot,Jupyter Notebook,Cartopy,我正在研究有关地球磁场的地面观测数据。我在Jupyter笔记本中使用Python。每个天文台都有一个数据系列,绘制为plt。散点图如下: # Scaling data down to point of obs ########################################### scax = 3 scay = 4 ntim=np.subtract(ntim,2000) ntim=np.multiply(ntim,scax) ndat=np.divide(ndat,scay) #

我正在研究有关地球磁场的地面观测数据。我在Jupyter笔记本中使用Python。每个天文台都有一个数据系列,绘制为
plt。散点图如下:

# Scaling data down to point of obs
###########################################
scax = 3
scay = 4
ntim=np.subtract(ntim,2000)
ntim=np.multiply(ntim,scax)
ndat=np.divide(ndat,scay)
###########################################

# Plots data from obs at the location of obs
# Plot at locations by adding coordinates of obs and subtracting the mean of each axis of data set
plt.scatter(ntim-np.mean(ntim)+phi, ndat-np.mean(ndat)+the, color='blue', marker='.')
plt.scatter(phi, the, color='red', marker='.')

代码:

#从.mat数据文件绘制时间序列和数据序列的函数
#(在dB方向上,基于out变量),与天文台代码关联(基于sta变量)
#它还接受一个可选参数“showdatapoints”,因此可以主要为调试而显示数据点
def plotdata_工作站(文件名、sta、out、start、stop、*参数):
#使函数根据输入使用数据系列中的三列之一(从而使用字段方向)
如果输出==“径向”:
dat=0
elif out=='theta':
dat=1
elif out==“φ”:
dat=2
#如果用户输入的不是这三个选项中的一个,它将返回一个错误和一个解决错误的提示
其他:
打印(“\n错误:组件“+”+“+输出+”+“+”无法识别…)
打印('\nHint:尝试使用'+''''+'径向'+''''、'+''+'θ'+''或'+'''''+'φ'+'.'))
#如果文件不存在,请尝试加载该文件
尝试:
nam=数据加载(文件名“obs_all”)
#如果文件不存在,它将返回错误和解决错误的提示
除:
打印(“\n错误:文件“+”+“文件名+”+“无法识别…”)
打印(“\n打印:尝试将文件与此脚本放在同一文件夹中。”)
#如果观测站代码不在数据文件中,它将返回错误和解决错误的提示
如果sta不在nam和sta中!='全部':
打印('\n错误:天文台代码'+'+sta+'+'无法识别…)
打印(“\n提示:尝试使用天文台位置地图中的天文台代码”。)
#从特定站点和现场方向加载数据
dat=dB_站(文件名、sta、dat)
tim=t_站(文件名,sta)
#如果开始是字符串但不是“最小值”,停止是字符串但不是“最大值”,则打印错误
如果(isinstance(start,str)=True和start!=“min”)或(isinstance(stop,str)=True和stop!=“max”):
打印('\n错误:时间范围超出数据集…'的界限)
打印('\n打印:尝试使用数据集中包含的时间范围,或使用'+''''+'最大'+''''+'或'+'''''+'最小'+'.'))
#选择“最小”或“最大”时间序列时,将“开始”和“停止”设置为“最小”或“最大”
如果开始=='min':
开始=分钟(tim)
如果停止==“最大”:
停止=最大(tim)
#如果时间范围超出数据集的界限,则打印错误
如果启动<最小(tim)或停止>最大(tim):
打印('\n错误:时间范围超出数据集…'的界限)
打印('\n打印:尝试使用数据集中包含的时间范围,或使用'+''''+'最大'+''''+'或'+'''''+'最小'+'.'))
#获取特定时间范围内与站点关联的所有数据
数据=[]
ntim=[]
对于范围(0,len(tim))内的x:

如果开始我是这样用数学方法做的:

# Scaling data down to point of obs
###########################################
scax = 3
scay = 4
ntim=np.subtract(ntim,2000)
ntim=np.multiply(ntim,scax)
ndat=np.divide(ndat,scay)
###########################################

# Plots data from obs at the location of obs
# Plot at locations by adding coordinates of obs and subtracting the mean of each axis of data set
plt.scatter(ntim-np.mean(ntim)+phi, ndat-np.mean(ndat)+the, color='blue', marker='.')
plt.scatter(phi, the, color='red', marker='.')

但是如果有人知道一种更“科学”的方法,我会欢迎你的回答。

我是这样用数学方法做的:

# Scaling data down to point of obs
###########################################
scax = 3
scay = 4
ntim=np.subtract(ntim,2000)
ntim=np.multiply(ntim,scax)
ndat=np.divide(ndat,scay)
###########################################

# Plots data from obs at the location of obs
# Plot at locations by adding coordinates of obs and subtracting the mean of each axis of data set
plt.scatter(ntim-np.mean(ntim)+phi, ndat-np.mean(ndat)+the, color='blue', marker='.')
plt.scatter(phi, the, color='red', marker='.')

但是如果有人知道一种更“科学”的方法,我欢迎你的回答。

你的代码在哪里?哈哈,很抱歉,我已经更新了帖子,现在包含了两个绘图所用的代码。我不熟悉cartopy,但你可以用数学方法实现这一点,并根据你的站坐标绘制点,或者只是插入一张图片你的代码在哪里?哈哈,很抱歉,我已经更新了帖子,加入了用于两个绘图的代码。我不熟悉cartopy,但你可以通过数学方法来实现这一点,并根据你的站坐标绘制点,或者只是插入一张图片