python - 在情节图例中写 $\sqrt(2)$ 而不是 1.414

标签 python matplotlib plot

使用适用于 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.)

这吐出来的剧情是:

enter image description here


编辑: 我应该提一下,我希望此代码采用 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/

相关文章:

r - 在 R 中使用 'par(mfrow=c())' 绘制数字

python - 使用 for 循环在列表中查找用户定义的项目

python - 将文本大小转换为数据坐标

python - 根据 X 绘制 Y,因为 X 是每个 y 值的时间范围

Python matplotlib 未绘制所有 3 个可用选项

python - 在 matplotlib 图中使用多种颜色

python - 添加圆柱体绘图

python - 在OpenCV中裁剪垂直轮廓,获取边框边界而不是区域

python - 在 flask 中使用 Gevent : API is not asynchronous

python - 推荐在Ubuntu下使用TensorFlow还是Windows下使用TensorFlow?