abu*_*kaj 5 python matplotlib python-2.x python-2.7 python-3.x
我需要提取matplotlib.lines.Line2D
对象的样式信息以在matplotlib.pyplot.plot()
调用中使用它。并且(如果可能的话)我想以一种比从Line2D.properties()
输出中过滤与样式相关的属性更优雅的方式来实现。
代码可能像这样:
import matplotlib.pyplot as plt
def someFunction(a, b, c, d, **kwargs):
line = plt.plot(a, b, marker='x', **kwargs)[0]
plt.plot(c, d, marker='o', **kwargs) # the line I need to change
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想用相同的样式(包括颜色)绘制两条线,但使用不同的标记。另外,plot()
除非颜色已明确指定为关键字参数,否则我希望能够使用该功能的“自动着色”功能。
Line2D
返回的对象plt.plot()
有一个update_from()
方法,该方法将原始实例的所有属性复制到新实例中,但保留该行的数据。您可以使用此行复制所有属性,然后设置所有应该“手动”不同的属性。这里有一个小例子:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
def someFunction(a, b, c, d, *args, **kwargs):
line1, = plt.plot(a, b, marker='x', *args, **kwargs)
line2, = plt.plot(c, d) # the line I need to change
##copy properties from line1
line2.update_from(line1)
##set every that should differ *after* update_from()
line2.set_marker('o')
x1 = np.linspace(0,np.pi,10)
x2 = np.linspace(np.pi,2*np.pi,10)
y1 = -np.sin(x1)**2
y2 = np.sin(x2)**2
someFunction(x1,y1,x2,y2, '--', lw=3, ms=10, color='g')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给出了以下图片:
如果省略color
关键字,将使用自动着色。