如何在Matplotlib的Y轴刻度中添加摄氏度(°C)符号
给Matplotlib Y轴刻度标签添加°C符号
我懂你要的是什么——不是只给Y轴标题加°C,而是让每个刻度数字后面都带上这个单位对吧?你现在的代码只设置了轴标题和刻度位置,没处理刻度标签的内容,咱们来解决这个问题,有两种简单的方法:
方法1:手动生成带单位的刻度标签
如果你已经像现在这样手动指定了刻度的位置(用np.arange),那直接生成对应的带°C的标签列表就行:
import matplotlib.pyplot as plt import numpy as np # 假设你的数据和原来定义的miny、maxy miny = 0 maxy = 100 plt.plot([1,2,3], [20,50,80]) # 设置Y轴标题(建议改成“温度”更清晰,当然你也可以保留原来的写法) plt.ylabel('温度', fontsize=30) # 生成刻度位置和对应的带°C标签 tick_positions = np.arange(miny, maxy + 20, step=20) # 加step是为了确保刻度范围包含maxy tick_labels = [f'{pos}°C' for pos in tick_positions] # 同时设置刻度位置和标签 plt.yticks(tick_positions, tick_labels, labelsize=20) plt.tick_params(labelsize=20) plt.show()
这里用f-string把每个刻度位置和°C拼接起来,Matplotlib完全支持这个Unicode符号,所以直接写就行,不用额外处理编码问题。
方法2:用FuncFormatter自动格式化(更灵活)
如果有时候你不想手动指定刻度位置,或者刻度是Matplotlib自动生成的,用FuncFormatter会更方便——它能自动给每个Y轴刻度加上单位:
import matplotlib.pyplot as plt import numpy as np from matplotlib.ticker import FuncFormatter # 示例数据 x = np.arange(1, 13) y = np.random.randint(0, 100, size=12) miny = y.min() maxy = y.max() plt.plot(x, y) plt.ylabel('温度', fontsize=30) # 可以手动指定刻度位置,也可以省略让Matplotlib自动生成 plt.yticks(np.arange(miny, maxy, step=20), labelsize=20) # 定义格式化函数:输入刻度值x和位置pos,返回带单位的字符串 def format_temperature(x, pos): # 如果刻度是整数,转成int让标签更整洁;如果是小数就直接用x return f'{int(x)}°C' if x.is_integer() else f'{x}°C' # 把这个格式化函数应用到Y轴的主刻度上 plt.gca().yaxis.set_major_formatter(FuncFormatter(format_temperature)) plt.tick_params(labelsize=20) plt.show()
这个方法的好处是,哪怕你调整了数据范围,或者让Matplotlib自动选刻度,标签都会自动带上°C,不用每次都手动改标签列表。
内容的提问来源于stack exchange,提问作者ZakS
相关产品推荐
相关产品推荐

