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

den*_*var 40 python matplotlib

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

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

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

p = plt.plot(x,y)
color = p[0].get_color()
Run Code Online (Sandbox Code Playgroud)

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

Hun*_*Hun 46

在您的示例中,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'
Run Code Online (Sandbox Code Playgroud)

线图


fin*_*oot 15

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

在下面的示例中,我正在创建示例数据,运行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()
Run Code Online (Sandbox Code Playgroud)

图1


Jim*_*ker 7

对于常规plt.plotitem.get_color()对它返回的列表的每个元素执行操作将使您获得每行的颜色。

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