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

g52tjvyc  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(136)

在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,但我不能确定它是否有可能实现我想要的;我可以画出线条的轮廓或阴影,但我不确定是否可以覆盖不同颜色的虚线。

lf5gs5x2

lf5gs5x21#

试试这个

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

我增加了线条的宽度,这样它就清晰可见了。因为黄色在白色背景下不是那么清晰;把它改成了绿色。对此很抱歉。你可以随时以任何方式改变颜色:)x1c 0d1x

jqjz2hbq

jqjz2hbq2#

如果你需要两条虚线的叠加,可以稍微修改一下。本质上,可以使用Tanmaya Meher描述的相同方法,但是为了得到正确的偏移,需要在破折号规范中做一些小改动。
具体地说,假设你想要一个点,一个空白与交替的颜色

. . . .

那么您可以使用虚线规范[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)

bfnvny8b

bfnvny8b3#

您可以使用gapcolor属性。请参阅:https://matplotlib.org/stable/gallery/lines_bars_and_markers/line_demo_dash_control.html

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', dashes=[4, 4], gapcolor='yellow')
ax.legend()
    
plt.show()

相关问题