You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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做标题、和其他字符串拼接时就会出现乱码、异常内容。

更简洁的解决方法

不用手动拼接年、月、日字段,有两种更优雅的实现:

  1. 直接转换cftime对象为格式化字符串:
# 取第一个时间元素直接格式化,支持任意格式自定义
day_str = ds.time.values[0].strftime("%Y-%m-%d")
ax.set_title(f'SST, {day_str}', size = 10.)
  1. 修正原有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:54:07