在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
,但我无法弄清楚是否有可能实现我的目标;我可以勾勒出阴影线或阴影线,但我不确定我是否可以覆盖不同颜色的虚线。
答案 0 :(得分:12)
试试这个。
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()
我增加了线宽,因此清晰可见。由于黄色在白色背景下不那么清晰;将其改为绿色。对于那个很抱歉。你可以随时改变颜色:)
答案 1 :(得分:0)
如果您需要两条虚线的叠加,则稍作调整。本质上,可以使用与 Tanmaya Meher 描述的相同的方法,但要获得正确的偏移量,需要在 dashes 规范中进行小改动。
具体来说,假设您想要 1 个点,1 个具有交替颜色的空白
. . . .
然后您可以使用虚线规范 [1,3]
开始第一条虚线。现在第二种颜色应该从 pos 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)