Python 散点图仅显示满足特定列中条件的线

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

我想使用cartopy将一些站点从txt文件分散到地图上:

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'])之后再次提供。