基于循环计数器的python matplotlib坐标轴标签下标

2 投票
1 回答
2602 浏览
提问于 2025-04-17 14:50

我正在使用Python和matplotlib来生成图形输出。
我在一个循环中创建多个图表,想让循环计数器在y轴标签上显示为下标。请问如何让这个循环计数器(一个变量)以下标的形式出现呢?

这是我现在的代码:

axis_ylabel = plt.ylabel(u"\u03b1 [\u00b0]", rotation='horizontal', position=(0.0,0.9))

结果是:

α [°]

(我使用unicode而不是Tex,因为这个系统上没有dvipng。)

我想要的效果是这样的:

for i in range(1,3):  
  axis_ylabel = plt.ylabel(u"\u03b1" + str(i) + u" [\u00b0]", rotation='horizontal', position=(0.0,0.9))

不出所料,这样的代码会得到:

α1 [°]
α2 [°]

但我真正想要的是这些数字能变成下标。请问我该如何把字符串转换和创建下标的命令结合起来呢?在unicode环境中,包含一个'_'并不能被识别为生成下标。此外,我还需要Python/matplotlib识别这个下标命令应该影响后面的变量。
有什么想法吗?

编辑

我已经做到这一点:

axis_ylabel = plt.ylabel(u"\u03b1" + r"$_" + str(i) + r"$" + u" [\u00b0]", rotation='horizontal', position=(0.0,0.9))  

-- 这会生成一个下标字符。不过,它不是整数值的转换,而是一个不同的符号。

编辑 2
我使用的是Python 2.6.6和matplotlib 0.99.1.1。在<>中插入任何类型的字符串在r"$<>$"中不会显示那个字符串,而是一个完全不同的字符。我已经把这个问题作为一个新问题发布了。

1 个回答

1

Matplotlib自带了一个数学表达式引擎,叫做mathtext
根据官方文档

你不需要安装TeX,因为matplotlib自带了自己的TeX表达式解析器、布局引擎和字体。

所以你可以尝试使用以下内容:

for i in range(1,3):
    plt.ylabel(
           r"$\alpha_{:d} [\degree]$".format(i),
           rotation='horizontal',
           position=(0.0,0.9))

mathtext中,你也可以使用Unicode:

如果某个特定的符号没有名字(就像STIX字体中的一些比较冷门的符号),你也可以使用Unicode字符:

 ur'$\u23ce$'

撰写回答