Python 散点图仅显示满足特定列中条件的线
我想使用cartopy将一些站点从txt文件分散到地图上:Python 散点图仅显示满足特定列中条件的线,python,python-3.x,colors,scatter-plot,Python,Python 3.x,Colors,Scatter Plot,我想使用cartopy将一些站点从txt文件分散到地图上: def ReadData(FileName,typee,delimee): return np.genfromtxt(FileName, dtype=typee, delimiter=delimee, encoding='latin-1') MyTypes = ("|U11","float","float","float","|U1&qu
def ReadData(FileName,typee,delimee):
return np.genfromtxt(FileName, dtype=typee, delimiter=delimee, encoding='latin-1')
MyTypes = ("|U11","float","float","float","|U1","|U2","|U1","|U29")
MyDelimiters = [11,9,10,7,1,2,1,29] # station ID, lat, lon (-180 to 180), elevation (m), blank, Country code, blank, Name
RawData = ReadData(stations.txt,MyTypes,MyDelimiters)
stations.txt:
01001099999 70.9330 -8.6670 9.0 NO JAN MAYEN(NOR-NAVY) 0100109
01001599999 61.3830 5.8670 327.0 NO BRINGELAND 0100159
01003099999 77.0000 15.5000 12.0 NO HORNSUND 0100309
01008099999 78.2460 15.4660 26.8 SV LONGYEAR 0100809
01010099999 69.2930 16.1440 13.1 NO ANDOYA 0101009
第2列表示纬度,第3列表示经度,第4列表示海拔
StationListID = np.array(RawData['f0'])
StationListLat = np.array(RawData['f1'])
StationListLon = np.array(RawData['f2'])
StationListElev = np.array(RawData['f3'])
我使用:
import matplotlib.pyplot as plt
import cartopy.crs as crs
plt.scatter(x=StationListLon, y=StationListLat,
color="dodgerblue",
s=1,
alpha=0.5,
transform=crs.PlateCarree())
如果标高<0,我希望有黑色圆点,绿色>5,红色>10,蓝色>15。在哪里设置if条件或对线路进行分组?模块和数据:
import numpy as np
import pandas as pd
import io
RawData = pd.read_csv(io.StringIO("""
x f1 f2 f3 stations
01001099999 70.9330 -8.6670 9.0 NOJANMAYEN(NOR-NAVY)
01001599999 61.3830 5.8670 327.0 NOBRINGELAND
01003099999 77.0000 15.5000 12.0 NOHORNSUND
01008099999 78.2460 15.4660 26.8 SVLONGYEAR
01010099999 69.2930 16.1440 13.1 NOANDOYA
"""), sep="\s", engine="python")
StationListLat = np.array(RawData['f1'])
StationListLon = np.array(RawData['f2'])
StationListElev = np.array(RawData['f3'])
您可以首先使用pd.cut
制作表示颜色的标签
color_labels = ['black', 'yellow', 'green', 'red', 'blue']
cut_bins = [-500, 0, 5, 10, 15, 500]
RawData['colors'] = pd.cut(RawData['f3'], bins=cut_bins, labels=color_labels)
然后您可以使用这些标签来显示点的颜色。请注意,0和5之间的值没有颜色,我只是给它黄色。
如你所见,我遗漏了crs部分,如果我没有弄错的话,它与这个问题没有直接关系
import matplotlib.pyplot as plt
plt.scatter(x=StationListLon, y=StationListLat,
color=RawData['colors'],
s=20,
alpha=0.5)
我的回答对你有帮助吗?非常感谢你的帮助,鲁瑟!你的代码是有效的。我通过
RawData=ReadData(InList,MyTypes,MyDelimiters)
和RawData['colors']=pd.cut(RawData['f3'],bins=cut\u bins,labels=color\u labels)读取数据。
给了我ValueError:没有名称颜色字段。
很难看到发生了什么。您能否更新您的问题并添加您所采取的所有步骤,并显示RawData.head()
在每个步骤后给出的内容?可能存在以下错误:RawData.head()
就在StationListElev=np.array(RawData['f3'])
给了我***属性错误:“numpy.ndarray”对象没有属性“head”
。如果我不在我的ASCII文件的第一行添加x个f1 f2 f3站,我的原始数据看起来是这样的:[('01001099999',70.933,--8.667,9.,'NO','JAN MAYEN(NOR-NAVY)')。('''''\n',nan,nan,'','','')
什么是类型(原始数据)
在ReadData
之后直接提供,在StationListElev=np.array(RawData['f3'])之后再次提供。
?