Matplotlib - 绘图

时间:2017-07-11 09:13:20

标签: python matplotlib

我遇到了我想要理解的python行为。看看以下几行。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,1,100)
plt.plot(x, x, 'k', color=None)
plt.plot(x, x**2, 'k', color=None)

根据matplotlib文档,plot-kwargs在Line2D class中定义。在那里,我们发现颜色需要“无”。作为默认参数。因此情节应该是黑白的。但是,输出很丰富。

enter image description here

如果我删除了可选的颜色参数,我会得到黑线。所以我的问题是,为什么上面的情节是有色的,即使我作为颜色选项传递了无?

修改:我了解删除color=None会导致'k'被用作颜色选项。但是,我想了解matplotlib内部如何能够在

之间产生干扰
plt.plot(x, x, 'k', color=None)

plt.plot(x, x, 'k')

如果颜色参数默认为None。 (这是根据文件。)

2 个答案:

答案 0 :(得分:3)

plt.plot(x, x, 'k', color=None)中,您有两种颜色定义。第一个是位置参数'k'(黑色),第二个是关键字参数color=None

如果遗漏color=None,将使用位置参数'k'并且线条将为黑色。不要在这里抱怨

如果指定color=None,它将覆盖'k'参数。因此color=None将确定颜色,这意味着根据current color cycle选择颜色。

回答有关如何区分案件的问题:

首先请注意,matplotlib管理参数和关键字参数的方式最终决定了行的属性是相当复杂的。要查看实际发生的情况,您可以从the plot function开始,并按照各种函数和类的参数进行操作。 要解释这里的所有内容会太多,所以让我们看一下如何以简化方式完成的示例。

情节方法看起来不像def plot(x,y,something, color=None),只是def plot(*args,**kwargs)

因此color不是参数,而是关键字参数。可以将两种颜色参数区分开来的方法是看起来像

def plot(*args,**kwargs):
    x = args[0]
    y = args[1]
    if len(args) > 2:
        color = args[2]
    else:
        color = None
    color = kwargs.get("color", color)
    print color

plot([1,2],[3,4], "k", color=None) # prints None
plot([1,2],[3,4], "k")             # prints k
plot([1,2],[3,4], color=None)      # prints None
plot([1,2],[3,4])                  # prints None

答案 1 :(得分:3)

参数'k'是黑色的颜色缩写。 但是当你设置color=None时,它会用None覆盖黑色,这意味着matplotlib将使用默认颜色。

matplotlib将自动循环显示颜色。默认情况下,它会循环显示蓝色,绿色,红色,青色,品红色,黄色,黑色。

编辑:在matplotlib 2.0中,默认颜色周期已更改:source