这是我的身材:
这是我的代码:
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad
mu = 0
def fermions_integrand(x):
return np.sqrt(x)*((np.log(1+np.exp(-x+mu))) + (1/(np.exp(x-mu)+1))*(x-mu))
def s_fermions(mu):
return quad(fermions_integrand, 0, np.inf)
def bosons_integrand(x):
return np.sqrt(x)*((-np.log(1-np.exp(-x+mu))) + (1/(np.exp(x-mu)-1))*(x-mu))
def s_bosons(mu):
return quad(bosons_integrand, 0, np.inf)
plt.figure(figsize=(8, 5))
plt.title('Fermions Vs Bosons')
plt.xlabel(r'$\mu$')
plt.ylabel('s/g')
plt.plot(np.linspace(-10,10), [s_fermions(mu) for mu in np.linspace(-10,10)], 'b-', lw=3, color='red', label='Fermions')
plt.plot(np.linspace(-10,10), [s_bosons(mu) for mu in np.linspace(-10,10)], 'b-', lw=3, color='blue', label='Bosons')
plt.legend()
plt.grid(True)
plt.show()
我认为代码是如此简单,但是为什么我得到了两次传奇?如何解决这个问题呢?
进一步的信息:实际上,我已经在另一个问题上使用过该绘图代码一次了(在Ubuntu上没有问题),但是为此,我只是移至OSX,我不确定是否与此问题相关?
最佳答案
发生这种情况是因为scipy.integrate.quad
返回估计的整数值和绝对误差的估计值,作为元组(y,abserr)
然后是两个理解列表
[s_fermions(mu) for mu in np.linspace(-10,10)]
[s_bosons(mu) for mu in np.linspace(-10,10)]
是几对值的列表,您正在绘制被积和绝对误差(实际上在整个域中非常接近零)。由于您一次要绘制两条线,因此有两个图例条目。
只需在
[0]
和s_bosons
的返回行中添加尾随的s_fermions
即可不绘制错误。关于python - 为什么我从matplotlib获得了两次传奇?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22629653/