将颜色条刻度从 10 的幂更改为纯数字
Posted
技术标签:
【中文标题】将颜色条刻度从 10 的幂更改为纯数字【英文标题】:Change colorbar ticks from powers of 10 to plain numbers 【发布时间】:2022-01-02 19:50:59 【问题描述】:我正在尝试读取 .nc 文件并在地图上显示数据。我希望颜色条刻度不是 10 次方,而是纯数字,所以从 0.1 到 10。此外,如果我可以格式化它,让它在 7 个刻度中从 0.1 到 10,那将是受欢迎的,所以结果与附图中的相同。
请注意,我没有添加与数据下载相关的代码sn -p,所以脚本无法运行。如果您不运行代码就无法发现错误,请告诉我,我会附上它,以便您下载 .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)
【问题讨论】:
【参考方案1】:颜色条应该是图中的最后一个轴 (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 之前,您必须分别设置刻度和标签)。
【讨论】:
非常感谢@Stef !!以上是关于将颜色条刻度从 10 的幂更改为纯数字的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Matplotlib 中颜色条刻度标签的字体大小?
matplotlib自定义设置plt.colorbar函数配置颜色条的刻度数实战:自定义设置颜色条刻度并为刻度值进行命名和标签化