将颜色条刻度从 10 的幂更改为纯数字

Change colorbar ticks from powers of 10 to plain numbers

我正在尝试读取 .nc 文件并在地图上显示数据。我希望 colorbar 刻度不是 10 的幂,而是纯数字,所以从 0.1 到 10。此外,如果我可以格式化它,它会很受欢迎,所以它从 0.1 到 10,就像 7 个刻度一样,所以结果与附图相同。

请注意,我没有添加与数据下载相关的代码片段,因此脚本无法运行。如果没有 运行 代码你不能发现错误,请告诉我,我会附上它以便你可以下载 .nc 文件。

这是我正在使用的代码。对不起,多余的进口。

import xarray as xr
import cartopy
import matplotlib
from matplotlib.colors import LogNorm
from matplotlib.offsetbox import AnchoredText
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
import sys
import os

#First we open the dataset and read the varaible of interest
ds = xr.open_dataset(OUTPUT_FILENAME)
chl = ds.CHL.sel(time=min_date)

#Setting the figure size and projection
fig = plt.figure(figsize=(15,15))
ax = plt.axes(projection=ccrs.PlateCarree())

#Adding coastlines and land
ax.coastlines(resolution="10m") #Coastline resolution
ax.set_extent([-9,2,35,37.6]) #Map extent
ax.add_feature(cartopy.feature.LAND) #Adding land
#Formatting colorbar <---------------------------------------------------DOES NOT WORK
ax.ticklabel_format(style='plain',useMathText=None)

#Adding gridlines
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,
                  linewidth=0.5, color='black', alpha=0.7, linestyle='--')
gl.top_labels = False
gl.right_labels = False

#Adding lat/lon labels in the axes
ax.text(-0.07, 0.55, 'Latitude [deg]', va='bottom', ha='center',
        rotation='vertical', rotation_mode='anchor',
        transform=ax.transAxes)
ax.text(0.5, -0.2, 'Longitude [deg]', va='bottom', ha='center',
        rotation='horizontal', rotation_mode='anchor',
        transform=ax.transAxes)

#Adding (C) info to the figure
SOURCE = 'ICMAN CSIC'
text = AnchoredText('$\copyright$ {}'.format(SOURCE),
                    loc=1, prop={'size': 9}, frameon=True)
ax.add_artist(text)

#Drawing the plot
chl.plot(ax=ax, transform=ccrs.PlateCarree(),
         vmin=0.1, vmax=10, extend='both', cbar_kwargs={'shrink': 0.2, 'pad':0.01},
         cmap="jet", norm=LogNorm(vmax=10))


#Figure title
ax.set_title("Chlorophyll NN (mg/m$^{3}$) "+ min_date_h + " - " + max_date_h)

颜色条应该是图中的最后一个轴 (fig.axes[-1])。 您可以手动设置颜色条的刻度和刻度标签:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors

X, Y = np.mgrid[-3:3:100j, -2:2:100j]
Z = 10*np.exp(-X**2 - Y**2)

fig, ax = plt.subplots()
pcm = ax.pcolor(X, Y, Z, norm=colors.LogNorm(vmin=.1, vmax=10), cmap='jet')
fig.colorbar(pcm, ax=ax)

cb = fig.axes[-1]
ticks = [.1,.2,.5,1,2,5,10]
cb.yaxis.set_ticks(ticks, labels=[f"{t:g}" for t in ticks])
cb.minorticks_off()

(在 matplotlib 3.5.0 之前,您必须分别设置刻度和标签)。