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

kr98yfug  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(374)

在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 但我不知道是否有可能实现我想要的;我可以勾勒或阴影线,但我不确定我可以覆盖不同颜色的虚线。

5gfr0r5j

5gfr0r5j1#

试试这个。

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

我增加了线条的宽度,使其清晰可见。因为黄色在白色背景下不是那么清晰;把它改成绿色。很抱歉。您可以随时以任何方式更改颜色:)

slwdgvem

slwdgvem2#

如果您需要两条虚线的叠加,则进行轻微调整。本质上,可以使用tanmaya meher描述的相同方法,但要获得正确的偏移量,需要在破折号规范中进行小修改。
具体地说,假设你想要1个点,1个空白和交替的颜色

. . . .

然后,您可以使用dash spec开始第一条虚线 [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)

相关问题