这个问题在这里已有答案:
我正在尝试添加带有下标的注释到我的散点图。问题是格式化似乎不适用于两位数的整数。注释仅将第一个符号转换为下标,如下图所示。有谁知道如何解决这一问题?
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]))