【问题标题】:how to plot the track of cyclone with marker colors according to intensity如何根据强度用标记颜色绘制旋风轨迹
【发布时间】:2020-09-28 15:09:09
【问题描述】:

我正在尝试在基本地图上绘制飓风的轨迹。我成功地用相同颜色的标记绘制它,我想要的是根据强度变化绘制标记。我将附上我可以使用相同颜色标记绘制轨道的代码部分。如果有人可以在这方面帮助我如何根据强度绘制赛道,将不胜感激。
我的代码:

llons, llats = np.meshgrid(lons, lats)
x,y = map(llons,llats)
plt.style.use('seaborn-white')
clevels=[-1.6,-1.2,-0.8,-0.4,0.0,0.4,0.8]
cs = map.contourf(x,y,plt_data,clevels,cmap=plt.cm.jet)
#cs = map.contourf(x,y,plt_data,cmap=plt.cm.jet)
#CS2 = ax.contour(cs, levels=cs.levels, colors='k')
#ax.clabel(cs,inline=True, fontsize=10)
map.colorbar(cs)
####################track##########################
import pandas as pd
df = pd.read_excel('E:/bst_trc.xls',sheet_name='1990')
latitude = df.Latitude.values[0:25]
longitude = df.Longitude.values[0:25]
it = df.Grade.values[0:25]
x,y = map(longitude, latitude)
colors = {'SUCS':'red', 'ESCS':'blue', 'SCS':'green', 'D':'black','VSCS':'orange','DD':'cyan'}
plt.scatter(x,y, s=50,edgecolors="red", facecolors='none', linewidth=2)
plt.plot(x,y,'k',linewidth=1.5 )

另外,我附上了纬度和强度值:

【问题讨论】:

    标签: python python-3.x pandas matplotlib matplotlib-basemap


    【解决方案1】:

    使用您的数据和此代码:

    import matplotlib.pyplot as plt
    import pandas as pd
    plt.style.use('seaborn-white')
    
    df = pd.read_csv('data.csv')
    
    colors = {'SUCS': 'red', 'ESCS': 'blue', 'SCS': 'green', 'D': 'black', 'VSCS': 'orange', 'DD': 'cyan', 'CS': 'magenta'}
    
    fig, ax = plt.subplots(1, 1)
    
    for grade in list(df['grade'].unique()):
        ax.scatter(df[df['grade'] == grade]['lon'],
                   df[df['grade'] == grade]['lat'],
                   s = 50,
                   label = grade,
                   facecolors = colors[grade])
    
    plt.plot(df['lon'], df['lat'], 'k-', lw = 1)
    
    ax.set_xlabel('Longitude')
    ax.set_ylabel('Latitude')
    ax.axis('equal')
    
    plt.legend()
    plt.show()
    

    我得到了这个散点图:


    如果您想将其与地图重叠,请检查以下代码:

    import matplotlib.pyplot as plt
    import pandas as pd
    from mpl_toolkits.basemap import Basemap
    plt.style.use('seaborn-white')
    
    df = pd.read_csv('data.csv')
    
    colors = {'SUCS': 'red', 'ESCS': 'blue', 'SCS': 'green', 'D': 'black', 'VSCS': 'orange', 'DD': 'cyan', 'CS': 'magenta'}
    
    fig, ax = plt.subplots(1, 1)
    
    m = Basemap(llcrnrlon = 75, llcrnrlat = 5, urcrnrlon = 90, urcrnrlat = 20, resolution = 'i', projection = 'merc')
    m.drawcoastlines(color = 'black')
    
    df['x'], df['y'] = m(list(df['lon']), list(df['lat']))
    
    for grade in list(df['grade'].unique()):
        ax.scatter(df[df['grade'] == grade]['x'],
                   df[df['grade'] == grade]['y'],
                   s = 50,
                   label = grade,
                   facecolors = colors[grade])
    
    plt.plot(df['x'], df['y'], 'k-', lw = 1)
    
    plt.legend()
    plt.show()
    

    给出这张地图:


    如果您想要更简单的解决方案,可以将上面代码中的 for 循环替换为:

    import seaborn as sns
    sns.scatterplot(data = df,
                    x = 'x',
                    y = 'y',
                    hue = 'grade',
                    s = 50)
    

    【讨论】:

    • @andreas 谢谢,这就是我想要的...如果我遇到任何问题,会告诉你。
    • 没有问题,抱歉不小心点击了
    • 假设我想要一个具有不同颜色的单线图,如何完成。
    • 看看this答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多