我在没有指定颜色的情况下绘制一条线(想想:plt.plot(x,y))。 说颜色是蓝色的。
问题:如何从plt对象中获取此颜色,以便将其放入变量中?
似乎这很接近(可能是解决方案):
p = plt.plot(x,y)
color = p[0].get_color()
更新了问题: 我不确定我是否理解" 0" index:p [0]总是访问最近绘制的线吗?
答案 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'
答案 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()
答案 2 :(得分:1)
对于常规plt.plot
,在返回的列表的每个元素上执行item.get_color()
,将为您提供每一行的颜色。
但是其他绘图功能(例如plt.scatter
)将返回Collection
。对于Collection
,您可以呼叫result.get_facecolor()
。这将返回元素的前景色的颜色值数组。因此,如果它们都是相同的颜色(就像在制作仅包含X和Y值的散点图时一样),result.get_facecolor()[0]
就足够了。