plt.gcf() 中的语法错误。用于地理气候数据集

Syntax error in plt.gcf(). Used on geographical climate dataset

我正在尝试绘制包含地理气候数据的下载 .nc 文件。 在最后一步中,我收到以下行的语法错误:plt.gcf().set_size_inches(20,10)。我似乎找不到错误。

成功下载文件后,这是我用来绘制数据的代码:

import numpy as np
import xarray # used for reading the data.
import matplotlib.pyplot as plt # used to plot the data.
import ipywidgets as widgets # For ease in selecting variables.
import cartopy.crs as ccrs # Used to georeference data.
filelist_arr = [save_dir + os.path.basename(file) for file in filelist]
selected_file = widgets.Dropdown(options=filelist_arr, description='data file')
display(selected_file)
# Now to load in the data to xarray
ds = xarray.open_dataset(selected_file.value)
# Helper methods# Define function to get standard dimensions
def get_time(dataset):
    for _,cur_coord in dataset.coords.items:
        if cur_coord.attrs['standard_name'] == 'time':
            return cur_coord
def get_lat(dataset):
    for _,cur_coord in dataset.coords.items:
        if cur_coord.attrs['standard_name'] == 'longitude':
            return cur_coord
def get_lon(dataset):
    for _,cur_coord in dataset.coords.items:
        if cur_coord.attrs['standard_name'] == 'latitude':
            return cur_coord

def get_primary(dataset):
    primary_variables = {}
    coords = dataset.coords.keys()
    highest_dims = 0
    for cur_key,cur_var in dataset.variables.items():
        if cur_key not in coords:
            primary_variables[cur_key] = cur_var
    return primary_variables 
var = widgets.Dropdown(
    options=get_primary(ds).keys(),
    description='Variable')
display(var)

到目前为止一切顺利。现在,在最后一个块中,第 3 行出现语法错误。

var = widgets.Dropdown(
proj = ccrs.Mercator()
plt.gcf().set_size_inches(20,10)
ax = plt.axes(projection=proj)
data_slice = ds[var.value].isel(time=10)
data_slice.plot.contourf(ax=ax, transform=ccrs.PlateCarree())
ax.set_global()
ax.coastlines()

这是错误:

File "<ipython-input-80-8848cc5cc689>", line 3
    plt.gcf().set_size_inches(20,10)
    ^
SyntaxError: invalid syntax

任何人都可以解释我做错了什么吗?

我认为您尝试将代码包装在 widgets.Dropdown() 代码中时有点困惑。

也许先编写没有小部件的代码是个好主意,如果您的代码可以工作,然后再添加它们。你能不能试试下面的代码,然后看看出现了哪些错误:

import numpy as np
import xarray
import matplotlib.pyplot as plt
import ipywidgets as widgets
import cartopy.crs as ccrs

# Load data into memory
filelist_arr = [save_dir + os.path.basename(file) for file in filelist]
selected_file = widgets.Dropdown(options=filelist_arr, description='data file')

# Create xarray
ds = xarray.open_dataset(selected_file.value)

# Helper methods
def get_time(dataset):
    for _,cur_coord in dataset.coords.items:
        if cur_coord.attrs['standard_name'] == 'time':
            return cur_coord
def get_lat(dataset):
    for _,cur_coord in dataset.coords.items:
        if cur_coord.attrs['standard_name'] == 'longitude':
            return cur_coord
def get_lon(dataset):
    for _,cur_coord in dataset.coords.items:
        if cur_coord.attrs['standard_name'] == 'latitude':
            return cur_coord

def get_primary(dataset):
    primary_variables = {}
    coords = dataset.coords.keys()
    highest_dims = 0
    for cur_key,cur_var in dataset.variables.items():
        if cur_key not in coords:
            primary_variables[cur_key] = cur_var
    return primary_variables 

# Ask user to select dataset
var = widgets.Dropdown(
    options=get_primary(ds).keys(),
    description='Variable')
display(var)

# Initialize new figure and specify figure size
plt.figure(num=None, figsize=(20, 10))

# Create Mercator projection with dateline in the middle
ax = plt.axes(projection=ccrs.Mercator(central_longitude=180))

# Draw coastlines
ax.coastlines()

# Select the appropriate data and plot to the axes
data_slice = ds[var.value].isel(time=10)
data_slice.plot.contourf(ax=ax, transform=ccrs.PlateCarree())

# Optional: set the map extent, for geographical coordinates
# ax.set_extent([90, 270, -40, 40], crs=ccrs.PlateCarree())

# Optional: add title
# plt.title('Geographical climate data at time = 10')

# Show the plot
plt.show()

如果仍然出错,请在下面的评论中告诉我。