如何在Python的plt中获得最新绘制线的颜色

时间:2016-04-18 16:09:54

标签: python matplotlib

我在没有指定颜色的情况下绘制一条线(想想:plt.plot(x,y))。 说颜色是蓝色的。

问题:如何从plt对象中获取此颜色,以便将其放入变量中?

似乎这很接近(可能是解决方案):

p = plt.plot(x,y)
color = p[0].get_color()

更新了问题: 我不确定我是否理解" 0" index:p [0]总是访问最近绘制的线吗?

3 个答案:

答案 0 :(得分:44)

在您的示例中,p是Line2D对象的列表。在该示例中,您只有一个线对象p [0]。以下是绘制三条线的示例。当添加更多行时,如果你想要最后一个绘图的颜色,它会附加到p.So。它将是a[-1].get_color()

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = np.arange(10)
p = plt.plot(x,y, x,y*2, x,y*3) # make three line plots
type(p) # list
type(p[0]) # <class 'matplotlib.lines.Line2D'>
p[0].get_color() # 'b'
p[1].get_color() # 'g'
p[2].get_color() # 'r'

line plot

答案 1 :(得分:4)

如果您无法访问或存储对plt.plot的调用的返回值,那么您还应该能够使用plt.gca().lines[-1].get_color()访问添加到绘图中的最后一行的颜色。 / p>

在以下示例中,我将创建示例数据,运行curve_fit,并以相同的颜色显示数据和拟合曲线。

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

m = 5
n = 3
x = np.arange(m)
y = np.array([i * x + np.random.normal(0, 0.2, len(x)) for i in range(n)])

def f(x, a, b):
    return a * x + b

for y_i in y:
    popt, pcov = curve_fit(f, x, y_i)
    plt.plot(x, y_i, linestyle="", marker="x")
    plt.plot(x, f(x, *popt), color=plt.gca().lines[-1].get_color())
plt.show()

Figure 1

答案 2 :(得分:1)

对于常规plt.plot,在返回的列表的每个元素上执行item.get_color(),将为您提供每一行的颜色。

但是其他绘图功能(例如plt.scatter)将返回Collection。对于Collection,您可以呼叫result.get_facecolor()。这将返回元素的前景色的颜色值数组。因此,如果它们都是相同的颜色(就像在制作仅包含X和Y值的散点图时一样),result.get_facecolor()[0]就足够了。