使用虚线很好,因为它提供了一种区分线条的方法,而不依赖于读者能够感知颜色差异。问题是它们只有在线条的细节都大于虚线图案时才起作用。Matplotlib 函数的Axes.plot
文档描述了如何自定义线条的颜色(使用关键字color
)以及如何自定义破折号的图案(dash
关键字)。有没有办法通过一次调用使绘图在两种不同的可选颜色之间交替,而不是“有”和“没有” Axes.plot
?
我可以通过绘制同一条线两次(一次用实线,然后用虚线重叠绘制相同的数据)来实现这种效果,但这使得管理 alpha 透明度变得复杂(当一个图上有几条相交线时,半透明线是理想的选择) )。下图中的黑色和灰色线是用这些代码行生成的:
ax.plot(xv1, yv1, marker="None", linestyle="-", color=(0.8, 0.8, 0.8, 1.0))
ax.plot(xv1, yv1, marker="None", linestyle="--", color=(0.0, 0.0, 0.0, 1.0))
Run Code Online (Sandbox Code Playgroud)
编辑:希望通过一次调用就可以做到这一点的另一个原因Axis.plot
是,它在创建图例时会正确显示示例行(我发现答案中给出的方法的唯一剩余缺点)。
尝试一下 @WilliamMiller 的漂亮答案,这可以扩展到两种以上的颜色:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi*4, 100)
y = np.sin(x+np.pi/2)
z = np.sin(x+np.pi/4)
w = np.sin(x)
plt.plot(x, y, linestyle=(0, (5, 5)), color='gold')
plt.plot(x, y, linestyle=(5, (5, 5)), color='crimson')
plt.plot(x, z, linestyle=(0, (10, 30)), color='blueviolet')
plt.plot(x, z, linestyle=(10, (10, 30)), color='lime')
plt.plot(x, z, linestyle=(20, (10, 30)), color='fuchsia')
plt.plot(x, z, linestyle=(30, (10, 30)), color='coral')
plt.plot(x, w, linestyle=(0, (10, 20)), color='crimson', lw=3)
plt.plot(x, w, linestyle=(10, (10, 20)), color='lime', lw=3)
plt.plot(x, w, linestyle=(20, (10, 20)), color='deepskyblue', lw=3)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这并不能通过一次调用来Axes.plot
完成您所要求的“ ”,但是可以通过使用两个自定义来创建所需的行为linestyles
- 其中一个由另一个破折号的宽度偏移。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi*4, 100)
y = np.sin(x)
plt.plot(x, y, linestyle=(0, (2, 2)))
plt.plot(x, y, linestyle=(2, (2, 2)))
plt.show()
Run Code Online (Sandbox Code Playgroud)
规范linestyle
是(offset, (on_off_seq))
其中是一个或多个值的on_off_seq
a ,以s 为单位。tuple
pt
归档时间: |
|
查看次数: |
1231 次 |
最近记录: |