我遇到了我想要理解的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中定义。在那里,我们发现颜色需要“无”。作为默认参数。因此情节应该是黑白的。但是,输出很丰富。
如果我删除了可选的颜色参数,我会得到黑线。所以我的问题是,为什么上面的情节是有色的,即使我作为颜色选项传递了无?
修改:我了解删除color=None
会导致'k'
被用作颜色选项。但是,我想了解matplotlib内部如何能够在
plt.plot(x, x, 'k', color=None)
和
plt.plot(x, x, 'k')
如果颜色参数默认为None
。 (这是根据文件。)
答案 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