plt.set_title()传入xarray时间转换字符串出现乱码如何解决?
问题原因
你代码的问题出在np.datetime_as_string返回值的处理逻辑上:
np.datetime_as_string(ds.time, unit='D')返回的是numpy字符串数组,不是Python原生字符串类型- 直接调用
.tobytes()获取到的是numpy内部存储的字节序列,numpy的Unicode字符串默认每个字符占4字节(小端序UTF-32编码),所以每个有效字符后面跟着3个\x00空字节 - 你直接用默认的UTF-8解码后,这些空字节属于不可见字符,
print时会被自动忽略所以看起来输出正常,但传递给matplotlib做标题、和其他字符串拼接时就会出现乱码、异常内容。
更简洁的解决方法
不用手动拼接年、月、日字段,有两种更优雅的实现:
- 直接转换cftime对象为格式化字符串:
# 取第一个时间元素直接格式化,支持任意格式自定义 day_str = ds.time.values[0].strftime("%Y-%m-%d") ax.set_title(f'SST, {day_str}', size = 10.)
- 修正原有numpy方法的调用逻辑,不要用
tobytes转码:
# 直接取数组第一个元素转为Python原生字符串 day_str = np.datetime_as_string(ds.time, unit='D')[0].item() ax.set_title(f'SST, {day_str}', size = 10.)
内容的提问来源于stack exchange,提问作者Tom F
相关产品推荐
相关产品推荐

