我需要提取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

在这种情况下,我希望两条线以相同的样式(包括颜色)绘制,但标记不同。
另外,我希望能够使用plot()函数的“autocoloring”功能,除非已将颜色明确指定为关键字参数。

最佳答案

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()

这给出了以下图片:

python - 如何将现有Line2D对象的样式复制到plot()调用? (matplotlib)-LMLPHP

如果您省略了color关键字,则将使用自动上色。

关于python - 如何将现有Line2D对象的样式复制到plot()调用? (matplotlib),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37859891/

10-12 07:03