【发布时间】:2021-01-19 18:18:46
【问题描述】:
我正在尝试找到绘制一些数据的最佳方法。基本上我有一个数据文件,其中包含纬度、经度、深度、sample_ID、Group_ID 列。我想生成一个二维散点图,其中 y 是深度,x 是从北到南的距离(以公里为单位)(或计算相对于在指定方向采样的第一个站的横断面距离),类似于 ODV 样式地图,如下一个:
更新
我想在我最初的问题中添加更多信息。经过更多的搜索和测试,我在 R 中找到了一个可能的解决方案,使用 geosphere 包和 distGEO 函数将我的坐标转换为以公里为单位的距离,然后可以映射。 (https://www.rdocumentation.org/packages/geosphere/versions/1.5-10/topics/distGeo)
如果有人知道 python 方法来做到这一点,那就太好了!
更新
ODV 不允许我进行我需要的自定义。我想生成这样的图,我可以在其中指定元数据变量来为点着色。在下面的文件示例中看到的我的数据文件中的 group_ID 列更具体。
Latitude Longitude Depth_m Sample_ID Group_ID
49.7225 -42.4467 10 S1 1
49.7225 -42.4467 50 S2 1
49.7225 -42.4467 75 S3 1
49.7225 -42.4467 101 S4 1
49.7225 -42.4467 152 S5 1
49.7225 -42.4467 199 S6 1
46.312 -39.658 10 S7 2
46.312 -39.658 49 S8 2
46.312 -39.658 73 S9 2
46.312 -39.658 100 S10 2
46.312 -39.658 153 S11 2
46.312 -39.658 198 S12 2
不过,试图弄清楚它给我带来了很多麻烦。我已经使用haversine计算计算了坐标之间的距离,但是一旦我到达那里,我不知道如何使用这些距离来合并到散点图中。这是我目前所拥有的:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
#import haversine as hs
from math import radians
from sklearn.neighbors import DistanceMetric
df=pd.read_csv("locations.csv",sep="\t",index_col="Sample_ID")
#plt.scatter(df['Latitude'], df['Depth_m'])
#plt.show()
df['Latitude'] = np.radians(df['Latitude'])
df['Longitude'] = np.radians(df['Longitude'])
dist = DistanceMetric.get_metric('haversine')
x = dist.pairwise(np.unique(df[['Latitude','Longitude']].to_numpy(),axis=0))*6373
print(x)
这段代码为我的坐标提供了一个距离矩阵,但老实说,我无法弄清楚如何将其拉入散点图,将 x 轴设置为从北到南。特别是因为必须考虑具有相同坐标的多个深度。非常感谢任何帮助绘图!
【问题讨论】:
-
您想要在 x 轴上专门针对所有 xticks 做什么?对于您的示例的输出,我得到:
[[ 0. 432.30988584] [432.30988584 0. ]] -
所以理论上我在 X 轴上想要的是让轴的“0”点从最北端的坐标开始,应该是(49.7225,-42.4467),然后是其余的坐标将被计算为与该坐标的距离(以公里为单位)。我可能需要重新评估我的haversine 计算。当前的 x 变量是一个距离矩阵,但可能更容易使用 hasrsine 函数,它应该只是 hasrsin(loc1,loc2)
标签: python matplotlib plot seaborn haversine