我喜欢用Pythons matplotlib
做一个词干,其中的数字有一个图例框,标签的颜色就像茎一样。目前我只得到一个图例,标签文字是正常的黑色,左边有一个短的茎图。我希望它只是标签文本,但是它的颜色与相应的词干一样(例如下面例子中的蓝色和绿色)。
请注意,实际的干图是具有多个子图的图的一部分,因此我希望解决方案使用ax
处理程序而不是plt
,如果可能的话。
import numpy as np
import matplotlib.pyplot as plt
n = np.arange(0, 10)
x1 = np.sin(n)
x2 = np.cos(n)
fig, ax = plt.subplots()
ax.stem(n, x1, 'b', markerfmt='bo', label="First")
ax.stem(n, x2, 'g', markerfmt='go', label="Second")
ax.legend()
plt.show()
简而言之,图例框应该只包含" First"蓝色和"秒"绿色,没有任何线条或点。
答案 0 :(得分:1)
您可以循环图例条目以将文本颜色设置为图例句柄的颜色。
leg = ax.legend()
for h, t in zip(leg.legendHandles, leg.get_texts()):
t.set_color(h.get_color()[0])
现在遗憾的是,传说句柄本身由几个艺术家组成,如果是干图,这样像t.set_visible(False)
这样的东西不能用于设置句柄不可见。相反,人们会在图例中深入挖掘一下,找到句柄的DrawingArea
并将此完整区域设置为不可见。
for l in leg._legend_handle_box.get_children()[0].get_children():
l.get_children()[0].set_visible(False)
完整示例:
import numpy as np
import matplotlib.pyplot as plt
n = np.arange(0, 10)
x1 = np.sin(n)
x2 = np.cos(n)
fig, ax = plt.subplots()
ax.stem(n, x1, 'b', markerfmt='bo', label="First")
ax.stem(n, x2, 'g', markerfmt='go', label="Second")
leg = ax.legend()
for h, t in zip(leg.legendHandles, leg.get_texts()):
t.set_color(h.get_color()[0])
for l in leg._legend_handle_box.get_children()[0].get_children():
l.get_children()[0].set_visible(False)
plt.show()
答案 1 :(得分:0)
使用basefmt
:
import numpy as np
import matplotlib.pyplot as plt
n = np.arange(0, 10)
x1 = np.sin(n)
x2 = np.cos(n)
fig, ax = plt.subplots()
ax.stem(n, x1, 'b', markerfmt='bo', basefmt=" ", label="First")
ax.stem(n, x2, 'g', markerfmt='go', basefmt=" ", label="Second")
x = np.linspace(*ax.get_xlim())
ax.plot(x, x*0, 'r-')
ax.legend()
plt.show()
我现在把基线放在一个黑客的方式,但它的工作原理。您可以更改基线的部分,使其从0开始,如果需要,则从9结束。