如何使用matplotlib在虚线中获得交替颜色?

19
在Matplotlib中,我想使用matplotlib.pyplot创建一条交替出现的黑色和黄色虚线,并将该线包含在图例中。我该怎么做?
我可以这样做:
from matplotlib import pyplot as plt, gridspec
import numpy as np

grid = gridspec.GridSpec(1,1)
ax = plt.subplot(grid[0,0])

x = np.arange(1,11)
y = x * 2

ax.plot(x, y, '-', color = 'black', linewidth = 1, label = 'my line')
ax.plot(x, y, '--', color = 'yellow')
ax.legend()

plt.show()

但是图例上的线将显示为实心黑色线,而不是黑黄相间的虚线。

我查看了matplotlib.path_effects,但我无法确定是否可以实现我想要的效果。我可以描边或阴影该线,但我不确定是否可以叠加不同颜色的虚线。


1
简短问题:该行是否应具有黄色和黑色虚线(即黄色虚线 - 空格 - 黑色虚线 - 空格 - 黄色虚线...)?或者适应黄色虚线位于实心黑线之上的图例条目是否足够? - hitzg
我脑海中的图像与Tanmaya Meher下面发布的内容相似 - 但是,如果你有按照你所描述的方式进行操作的方法,那么这对于将来访问此问题的人可能会有用,因此我鼓励你无论如何将其添加为答案! - John Coxon
3个回答

18

试试这个。

from matplotlib import pyplot as plt, gridspec, lines

import numpy as np

grid = gridspec.GridSpec(1,1)
ax = plt.subplot(grid[0,0])

x = np.arange(1,11)
y = x * 2

ax.plot(x, y, '-', color = 'black', linewidth = 5)
ax.plot(x, y, '--', color = 'lawngreen', linewidth = 5)

dotted_line1 = lines.Line2D([], [], linewidth=5, linestyle="--", dashes=(10, 1), color='lawngreen')
dotted_line2 = lines.Line2D([], [], linewidth=5, linestyle="-", dashes=(5, 4), color='black')

plt.legend([(dotted_line1, dotted_line2)], ["My Line"])
plt.show()

我增加了线条宽度,以便更清晰可见。由于在白色背景下黄色不太清晰,所以将其改为绿色。很抱歉。您随时可以以任何方式更改颜色 :)

output

1
谢谢,这很完美。 - John Coxon

3
如果您需要叠加两条点状线,可以进行轻微的调整。与Tanmaya Meher所述的方法基本相同,但要正确偏移,需要在划痕规范中进行小的修改。
具体而言,假设您想要交替颜色的1个点、1个空白。
. . . .

接着,您可以使用破折号规范[1,3]开始第一个虚线。现在第二种颜色应该从位置2开始,然后具有相同的规范,以便它们可以很好地交错。由于没有明确设置偏移量的方法,因此需要使用回避破折号序列[0,2, 1, 1],即没有点,两个空格,一个点,一个空格,这将设置所需的偏移量。

import matplotlib.pyplot as plt

from matplotlib.lines import Line2D

color1 = "blue"
color2 = "orange"

fig, ax = plt.subplots()
l1 = Line2D([0,1], [0.5, 0.5], linestyle="dotted", color=color1, lw=10)
l1.set_dashes([0, 2, 1,1])
l2 = Line2D([0,1], [0.5, 0.5], linestyle="dotted", color=color2, lw=10)
l2.set_dashes([1, 3])

ax.add_artist(l1)
ax.add_artist(l2)
ax.legend(handles=((l1,l2),), labels=("label",), handlelength=3)

Dotted line with alternating colors + legend


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接