【问题标题】:What is the difference between importing matplotlib and matplotlib.pyplot?导入 matplotlib 和 matplotlib.pyplot 有什么区别?
【发布时间】:2016-08-08 07:06:15
【问题描述】:

我对 python 还是很陌生,想知道 x.y 语句是否意味着 y 是 x 的子模块?如果是这样,不是命令:

import matplotlib.pyplot as plt

只导入这个特定的子模块而不是别的吗?我必须这样做才能访问hist 函数。这对调用import matplotlib as plt 时通常导入的模块有何影响?我可以将matplotlib中的所有模块放在plt名称下吗?

我知道这个问题与what is the difference between importing python sub-modules from NumPy, matplotlib packages 有关但这个问题的答案并没有告诉我是否导入了 matplotlib 中的任何其他内容,以及如何只导入所有 matplotlib 而不必担心子模块被遗漏。

【问题讨论】:

  • 你的意思是你不能再使用plot函数了?
  • @Plasma 导入 matplotlip.pyplot 后,您不能再使用 plt.plot(x,y) (模块未导入...?)还是我只是做了一些愚蠢的事情?
  • 所以如果你说import matplotlib.pyplot as plt plt.plot() 不会工作?还是说import matplotlib.pyplot 然后plt.plot()
  • @Plasma 你是对的,我刚试过这个,之前一定做错了什么。我修改了这个问题,但它让我更加困惑......是否只导入了 pyplot 模块?还是包括子模块 pyplot 在内的所有 matplotlib?
  • pyplot 是 matplotlib 的一个子模块,如果您以这种方式导入它可能会更清楚:from matplotlib import pyplot as plt。你可以说from matplotlib import *,然后你会在matplotlib中导入every module,包括pyplot(并通过调用matplotlib.pyplot.plot进行绘图。但是,如果你要绘制东西,pyplot可能是你唯一的一个'会需要的。

标签: python matplotlib plot


【解决方案1】:

看看这个代码库树:matplotlib 包含一个代码库,而pyplot 只是这个库的一个文件。

import matplotlib

将导入此 repo 中的所有文件。例如使用它:

import matplotlib as mpl
mpl.pyplot.plot(...)

要导入 pyplot:

from matplotlib import pyplot as plt
# or
import matplotlib.pyplot as plt
plt.plot(...)

问你一个问题:你使用什么控制台?我猜是 Ipython 控制台什么的?

编辑

全部导入:

from matplotlib import *
pyplot(...)

为什么我猜你在使用 Ipython? Ipython 控制台在启动时默认从 numpy 和其他一些库中导入所有模块,因此在 Ipython 控制台中您可以简单地使用:sqrt,而不是 import math; math.sqrt 等。matplotlib 在 Ipython 中默认导入。

【讨论】:

  • 是的,我在 Spyder 中使用了 IPython 控制台。谢谢,这是有道理的。我仍然想知道(我刚刚问了@Plasma 上面同样的问题)是否有办法直接导入所有子模块中的所有函数?这可能不是可取的,但在我看来,导入 matplotlib 包含的所有内容并使用简单的语句(例如 plot(x,y))会更容易,至少在学习如何正确使用 python 的前几个月
  • 谢谢!我不知道 IPython 会自动导入其中的一些库,但它解释了我在使用它时注意到的一些事情!您的编辑工作方式现在我可以使用 pyplot.plot(x,y) 但我不能只输入 plot(x,y)。不过没关系,多亏了你和 Plasma,我明白现在发生了什么!
  • @Moppentapper 你真的了解吗? plotmatplotlib.pyplot 中的一个函数,当只导入 matplotlib.* 时,你抱怨不能简单地 plot??有用时点赞一个答案。
  • 我的理解是这样的:pyplot是matplotlib的一个子模块。编写from matplotlib import * 将所有子模块导入工作区。在这种情况下,要使用plot 函数,而不是写matplotlib.pyplot.plot(x,y),我可以写pyplot.plot(x,y),但我不能写plot(x,y),因为plot 不会直接在工作区中定义。如果要在没有“前缀”的情况下使用plot,那么我必须使用from matplotlib.pyplot import *,但我不能将所有子模块中的所有功能直接导入工作区。这是正确的吗?
  • 当你了解发生了什么时,Python 会更有趣!!
【解决方案2】:

我不知道有什么方法可以从每个子模块中导入所有函数。可以按照您建议的方式从子模块导入所有功能,例如from matplotlib.pyplot import *

请注意导入每个函数的潜在问题;您可以通过定义自己的同名函数来覆盖导入的函数。例如:

from matplotlib.pyplot import *

def plot():
    print "Hello!"

plot()

会输出

Hello!

【讨论】:

  • 这是有道理的,所以我假设至少一个函数定义在 matplotlib 的至少 2 个子模块中。然后将其全部导入会导致阴影。现在有趣的东西都建立起来了!
【解决方案3】:

我安装了 conda,它在 ~/.bashrc 中添加了一些东西。

评论使它对我有用。

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 2018-06-23
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多