[英]Plot latitude, longitude, elevation and EMF data from CSV in Python
我正在嘗試 plot 來自 CSV 文件的大量緯度、經度、海拔和 EMF 值。 CSV 文件看起來像這樣
dat,latitude,longitude,EMF,Elevation
1/20/2022 7:18:17,59.39556688,18.12773272,0,18.17260262
1/20/2022 7:18:18,59.39556685,18.12773267,0,18.17260262
1/20/2022 7:18:19,59.39556684,18.12773265,0,18.17260262
1/20/2022 7:18:20,59.39556693,18.1277326,4.1,18.17260262
1/20/2022 7:18:21,59.39556698,18.12773191,4,18.17260262
1/20/2022 7:18:22,59.39556714,18.1277315,4.1,18.17260262
1/20/2022 7:18:23,59.39556728,18.12773191,4.1,18.17260262
1/20/2022 7:18:24,59.39556718,18.12773088,4,18.17260262
1/20/2022 7:18:25,59.39556755,18.12773013,4.1,18.17260262
1/20/2022 7:18:26,59.39556755,18.1277296,131,18.17260262
1/20/2022 7:18:27,59.39556729,18.12772922,125.9,18.17260262
1/20/2022 7:18:28,59.39556682,18.1277278,9,18.17260262
1/20/2022 7:18:29,59.39556684,18.1277263,4.1,18.17260262
我想根據 EMF 值用不同的 colors 來表示它們。
我的代碼是這個
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import pandas
points = pandas.read_csv('data.csv')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
latitude = points['latitude'].values
longitude = points['longitude'].values
EMF = points['EMF'].values
plt.ticklabel_format(useOffset=False)
ax.scatter(latitude, longitude, EMF, c='r', marker='o')
plt.show()
我怎樣才能做到這一點?
編輯:根據 T 先生的評論,您可以將 EMF 插入 c
import pandas as pd
from io import StringIO
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
s = """1/20/2022 7:18:17,59.39556688,18.12773272,0,18.17260262
1/20/2022 7:18:18,59.39556685,18.12773267,0,18.17260262
1/20/2022 7:18:19,59.39556684,18.12773265,0,18.17260262
1/20/2022 7:18:20,59.39556693,18.1277326,4.1,18.17260262
1/20/2022 7:18:21,59.39556698,18.12773191,4,18.17260262
1/20/2022 7:18:22,59.39556714,18.1277315,4.1,18.17260262
1/20/2022 7:18:23,59.39556728,18.12773191,4.1,18.17260262
1/20/2022 7:18:24,59.39556718,18.12773088,4,18.17260262
1/20/2022 7:18:25,59.39556755,18.12773013,4.1,18.17260262
1/20/2022 7:18:26,59.39556755,18.1277296,131,18.17260262
1/20/2022 7:18:27,59.39556729,18.12772922,125.9,18.17260262
1/20/2022 7:18:28,59.39556682,18.1277278,9,18.17260262
1/20/2022 7:18:29,59.39556684,18.1277263,4.1,18.17260262"""
df = pd.read_csv(StringIO(s), header=None)
df.columns = pd.Index(['dat','latitude','longitude','EMF','Elevation'])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.ticklabel_format(useOffset=False)
x, y, z = df['latitude'], df['longitude'], df['EMF']
ax.scatter(x, y, z, c=z)
plt.show()
原始答案無需采用更高級的方法,您可以選擇一些閾值並使用 pandas 方便的索引功能來 plot 不同的閾值和不同的 colors。
import pandas as pd
from io import StringIO
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
s = """1/20/2022 7:18:17,59.39556688,18.12773272,0,18.17260262
1/20/2022 7:18:18,59.39556685,18.12773267,0,18.17260262
1/20/2022 7:18:19,59.39556684,18.12773265,0,18.17260262
1/20/2022 7:18:20,59.39556693,18.1277326,4.1,18.17260262
1/20/2022 7:18:21,59.39556698,18.12773191,4,18.17260262
1/20/2022 7:18:22,59.39556714,18.1277315,4.1,18.17260262
1/20/2022 7:18:23,59.39556728,18.12773191,4.1,18.17260262
1/20/2022 7:18:24,59.39556718,18.12773088,4,18.17260262
1/20/2022 7:18:25,59.39556755,18.12773013,4.1,18.17260262
1/20/2022 7:18:26,59.39556755,18.1277296,131,18.17260262
1/20/2022 7:18:27,59.39556729,18.12772922,125.9,18.17260262
1/20/2022 7:18:28,59.39556682,18.1277278,9,18.17260262
1/20/2022 7:18:29,59.39556684,18.1277263,4.1,18.17260262"""
df = pd.read_csv(StringIO(s), header=None)
df.columns = pd.Index(['dat','latitude','longitude','EMF','Elevation'])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.ticklabel_format(useOffset=False)
below = df[df['EMF'] < 2]
x, y, z = below['latitude'], below['longitude'], below['EMF']
ax.scatter(x, y, z, c='r')
above = df[df['EMF'] >= 2]
x, y, z = above['latitude'], above['longitude'], above['EMF']
ax.scatter(x, y, z, c='b')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.