python - 为什么我从 matplotlib 中得到了两次图例?

标签 python numpy matplotlib scipy

这是我的图:

enter image description here

这是我的代码:

#!/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)]

是值对的列表,您正在绘制被积函数和绝对误差(实际上在整个域中非常接近于零)。由于您一次绘制两条线,因此有两个图例条目。

只需在 s_bosonss_fermions 的返回行中添加尾随 [0] 即可不绘制错误。

关于python - 为什么我从 matplotlib 中得到了两次图例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629653/

相关文章:

python - 如何使用带有约束和动态函数的 Scipy minimize

python - 如何逐个元素比较两个矩阵(numpy ndarrays)并获取每次比较的最小值

python - 使用 Matplotlib 和 Python 绘制直方图高度

python - matplotlib : How to display graphs or figures with pylab

python - 将 Shutil.make_archive 与 zipfile.ZIP_STORED 一起使用吗?

python - 使用 Django 获取具有尽可能接近日期的不同条目的查询集

python - 在 docker 镜像中安装 R

python - 读取中间有一列字符串的 csv 文件

python - 在python中用numpy识别一列中具有相同值的向量

python - 使用 mplcursors 在同一图表上为多个数据集添加标签