【问题标题】:Matplotlib annotate with subscript and format [duplicate]Matplotlib用下标和格式注释[重复]
【发布时间】:2019-07-11 14:44:23
【问题描述】:

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

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

【问题讨论】:

    标签: python matplotlib annotations scatter-plot subscript


    【解决方案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]))
    

    【讨论】:

    • 感谢您回答我的问题。我有一个小后续,与您可能可以帮助我解决的主要问题无关。目前右上角的注释显示在绘图窗口之外。你知道如何预防吗?
    • 一种选择是简单地更改 x 限制 plt.gca().set_xlim(-10, 310)。另一种选择是向plt.annotate 添加对齐参数。像verticalalignment='bottom', horizontalalignment='center' 这样的东西可能会给你想要的东西
    【解决方案2】:

    这将对您有所帮助,并且可能更直观。不要使用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]))
    

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      相关资源
      最近更新 更多