使用适用于 Python 的 matplotlib,如何在绘图图例中使用平方根符号而不是其十进制值来编写 put 'sqrt(2)'?请参阅下面的图和代码。如果我需要详细说明,请告诉我。谢谢!
import matplotlib.pyplot as plt
import numpy as np
E = np.linspace(50000,200000,1000) # eV
a = 3.615*10**(-10) #m
h = 6.582*10**(-16) #eV s
m = 9.109*10**(-31) #kg
J = 6.242*10**(-18) #1eV to J
def T(x,E):
return np.arcsin(x*np.sqrt(J*((np.pi**2 *h**2)/(a**2 * 4*m *E))))*1000
fig, ax = plt.subplots()
x = np.asarray([2*np.sqrt(2), 2, np.sqrt(3)])
for i in x:
ax.plot(E,T(i,E),label='hkl=%s' % i)
plt.ylabel('$\Theta$ (mrad)')
plt.xlabel('Energy (eV)')
plt.legend(bbox_to_anchor=(1.01, 1), loc=1, borderaxespad=0.)
这吐出来的剧情是:
编辑:
我应该提一下,我希望此代码采用 x
中的任何值并绘制它,使用图例中的实际平方根符号而不是其十进制值。
最佳答案
您可以使用 Unicode 将平方根符号写为字符串,然后添加您感兴趣的任何数字。要将平方根符号写为字符串,请使用 '\u221A'
。
修改代码的一种方法是将 x 变成字典。所以 x={'2\u221A2': 2*np.sqrt(2), '2':2, '\u221A3':np.sqrt(3)}
。您的 for 循环将变为 for k,v in x.items()
,其中 k 和 v 是键和值的缩写,循环中的第一行将是 ax.plot(E, T(v,E),label='hkl=%s' % k)
在解析数字并将其作为平方根写出方面,这有点复杂,在代码审查中看起来像这个问题:https://codereview.stackexchange.com/questions/144041/reduce-square-root-to-simplest-radical-form
关于python - 在情节图例中写 $\sqrt(2)$ 而不是 1.414,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320722/