繁体   English   中英

如何在 Python 的 plt 中获取最近绘制的线条的颜色

[英]How to get color of most recent plotted line in Python's plt

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

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

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

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

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

在您的示例中, 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'

线图

如果您无法访问或存储对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()

图 1

对于常规plt.plot ,在它返回的列表的每个元素上执行item.get_color()将获得每行的颜色。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM