【问题标题】:dynamic latex code in a matplotlib title [duplicate]matplotlib标题中的动态乳胶代码[重复]
【发布时间】:2018-05-09 09:54:55
【问题描述】:

我正在使用 matplotlib 在 jupyter 上绘制动态图,这意味着在 for 循环中,每个不同的循环都会提供不同的图,如下例所示

import matplotlib.pyplot as plt
import numpy as np
import time
import matplotlib as mpl
mpl.rcParams['lines.linewidth'] = 2
plt.ion()
%matplotlib notebook

x = np.arange(-10, 10, 0.01)

fig = plt.figure(figsize = (12, 7))
ax = fig.add_subplot(111)
ax.grid()
plt.show()
for j in range(1,5):
    ax.set_title(r"%6.2f    $y = \frac{\sin{(\pi x j)}}{(\pi x j)}$" % j)
    y = np.sin( np.pi*x*j )/( np.pi*x*j )
    line, = ax.plot(x, y, 'b')
    fig.canvas.draw()
    time.sleep(1)
    if j != 4:
        line.remove()

“ax.set_title”行提供了标题,该标题具有恒定的乳胶代码和随时间变化的数字。我的问题是我可以从乳胶代码中更改标题中的数字,但我真的不知道如何更改乳胶代码内部的一个部分。

在前面的示例中,对于每个不同的循环,我不仅想要一个不同的情节,而且还想要一个带有不同乳胶代码的标题,它提供了不同的结果,如此处报告的

有没有人可以给我一些建议?

【问题讨论】:

  • @ImportanceOfBeingErnest - 只是因为您使用了.format()。 OP 使用% 格式,我链接的问题的第二个答案显示了一个完全有效的解决方案:r"%(j)6.2f $y = \frac{\sin{(\pi x %(j)6.2f)}}{(\pi x %(j)6.2f)}$" % {'j': j}

标签: python matplotlib latex jupyter-notebook


【解决方案1】:

使用format 表示法是有意义的。
然后,您需要转义所有需要成为 MathText 字符串一部分的大括号。

plt.title(r"$y = \frac{{\sin{{({j}\pi)}}}}{{({j}\pi)}}$".format(j=3.14159265359))

要以format 表示法格式化数字,您可以定义小数位数 ({j:.3f}) 或使用通用数字格式 ({j:g})。

plt.title(r"$y = \frac{{\sin{{({j:.3f}\pi)}}}}{{({j:g}\pi)}}$".format(j=3.14159265359))

【讨论】:

  • f-strings 的好时机!
  • 等一下,你能把 r-strings 和 f-strings 结合起来吗?
  • @PaulH 好吧,你不需要r"",因为反斜杠可以转义为“\\”。但由于我很少为纯 python 3 编写代码,所以我从未使用过f""
  • 快到了。唯一的问题是您的代码为我提供了 10 个十进制数字,我怎样才能只显示其中两个?
  • @StefanoFedele 将 {j} 更改为 {j:0.2f}(0.2 = 两位小数,f = 浮点数)
猜你喜欢
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多