Matplotlib用下标和格式注释[重复]

问题描述 投票:0回答:2

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

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]))

Failed subscripts

python matplotlib annotations scatter-plot subscript
2个回答
1
投票

以下将解决您的问题。

基本上,当下标长于单个字符时,您需要在下标周围添加花括号。但是,因为花括号也与格式方法有关,所以必须通过更多括号来转义额外的括号,以便按我们的意愿进行解释。

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]))

0
投票

这会对你有所帮助,也可能更直观。而不是使用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]))
© www.soinside.com 2019 - 2024. All rights reserved.