Plot Meshgrid in Basemap (advanced)

Viewed 40

Hi I have created a gridded data in an interpolation which looks like this.

       Unnamed: 0  Latitude  Longitude     Value
0               0    -180.0 -65.079444 -6.983734
1               1    -179.0 -65.079444 -6.980051
2               2    -178.0 -65.079444 -6.976613
3               3    -177.0 -65.079444 -6.973421
4               4    -176.0 -65.079444 -6.970478

Now I would like to plot this data easily in Basemap and display the values with contourf.

My code looks like this:

from traceback import print_tb
import numpy as np
from pykrige.ok import OrdinaryKriging
from pykrige.kriging_tools import write_asc_grid
import pykrige.kriging_tools as kt
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Path, PathPatch
import pandas as pd

def load_data():
    df = pd.read_csv(r"File", sep=',')
    return(df)

def get_data(df):
    return {
        "lons": df['Longitude'],
        "lats": df['Latitude'],
        "values": df['Value'],
    }

def generate_grid(data, basemap):
    grid = {
        'lon': data['lons'],
        'lat':  data['lats'],
    }
    grid["x"], grid["y"] = np.meshgrid(grid["lon"], grid["lat"])
    grid["x"], grid["y"] = basemap(grid["x"], grid["y"])
    return grid

def prepare_map_plot():
    figure, axes = plt.subplots(figsize=(10,10))
    basemap = Basemap(projection='robin', lon_0=0, lat_0=0, resolution='h',area_thresh=1000,ax=axes) 
    basemap.drawcoastlines() 
    basemap.drawparallels(np.arange(-90.,120.,30.))
    basemap.drawmeridians(np.arange(0.,420.,60.))
    return figure, axes, basemap

def plot_mesh_data(data, grid, basemap):
    colormesh = basemap.contourf(grid["x"], grid["y"], data['values'],32, cmap='RdBu_r') 
    color_bar = basemap.colorbar(colormesh,location='bottom',pad="10%") 

df = load_data()
base_data = get_data(df)
figure, axes, basemap = prepare_map_plot()
grid = generate_grid(base_data, basemap)
plot_mesh_data(base_data, grid, basemap)
plt.show()

However, I keep getting the error message:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

So how can I make the plot better? Or is my Idea wrong?

0 Answers
Related