gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:20:39 27 4
gpt4 key购买 nike

我需要提取 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() 函数的“自动着色”功能,除非颜色已明确指定为关键字参数。

最佳答案

plt.plot() 返回的 Line2D 对象有一个 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()

这给出了下图:

result of the above code

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com