Matplotlib 用下标和格式注释

Matplotlib annotate with subscript and format

我正在尝试将带下标的注释添加到我的散点图中。问题是格式似乎不适用于两位数的整数。注解只是把第一个符号变成了下标,如下图所示。有谁知道如何解决这个问题?

import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rnd

rnd.seed(1234)

#Generate data
n = 12 #Number of vehicles
N = [i for i in range(1,n+1)] #Set of vehicles
V = [0] + N #Set of all nodes
q = {i: rnd.randint(1,10) for i in N} #Number of goods to be transported to each customer

#Generate coordinates
loc_x = rnd.rand(len(V))*300
loc_y = rnd.rand(len(V))*500

plt.scatter(loc_x[1:], loc_y[1:], c='b')
for i in N:
    plt.annotate('$q_{}={}$'.format(i, q[i]),(loc_x[i]+2, loc_y[i]))

以下将解决您的问题。

本质上,当您的下标长于单个字符时,您需要在下标周围添加大括号。但是,由于大括号也与格式方法有关,因此必须通过更多的大括号对多余的大括号进行转义才能按我们的意愿进行解释。

plt.scatter(loc_x[1:], loc_y[1:], c='b')
for i in N:
    plt.annotate('$q_{{{}}}={}$'.format(i, q[i]),(loc_x[i]+2, loc_y[i]))

这会对您有所帮助,而且会更直观。不要使用 format,而是使用 string formatting%。还要注意乳胶格式中的大括号 {} 。您需要将所有要显示为下标的文本括起来。

import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rnd

rnd.seed(1234)

#Generate data
n = 12 #Number of vehicles
N = [i for i in range(1,n+1)] #Set of vehicles
V = [0] + N #Set of all nodes
q = {i: rnd.randint(1,10) for i in N} #Number of goods to be transported to each customer

#Generate coordinates
loc_x = rnd.rand(len(V))*300
loc_y = rnd.rand(len(V))*500

plt.scatter(loc_x[1:], loc_y[1:], c='b')
for i in N:
    plt.annotate(r'$q_{{%d}_{%d}}$'%(i, q[i]),(loc_x[i]+2, loc_y[i]))