可以为 Matplotlib 虚线设置“关闭”颜色吗?

Sea*_*ake 5 python matplotlib

使用虚线很好,因为它提供了一种区分线条的方法,而不依赖于读者能够感知颜色差异。问题是它们只有在线条的细节都大于虚线图案时才起作用。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是,它在创建图例时会正确显示示例行(我发现答案中给出的方法的唯一剩余缺点)。

具有交替颜色虚线的绘图示例。

Joh*_*anC 6

尝试一下 @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)

结果图


Wil*_*ler 5

这并不能通过一次调用来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_seqa ,以s 为单位。tuplept