matplotlib茎图中的彩色标签文本

时间:2018-01-24 12:56:17

标签: python matplotlib colors

我喜欢用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()

enter image description here

简而言之,图例框应该只包含" First"蓝色和"秒"绿色,没有任何线条或点。

2 个答案:

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

enter image description here

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

这导致enter image description here

我现在把基线放在一个黑客的方式,但它的工作原理。您可以更改基线的部分,使其从0开始,如果需要,则从9结束。