dim*_*mka 17 python plot numpy matplotlib legend
在某些LCD显示器上,图例中水平线的颜色很难区分.(见附图).因此,不是在图例中画一条线,是否可以只对文本本身进行颜色编码?换句话说,蓝色为"y = 0x",绿色为"y = 1x"等...
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
ax.plot(x, i * x, label='$y = %ix$' % i)
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
PS.如果线条可以在图例中变厚,但在图表中没有,这也可以.
Dan*_*ein 21
我想知道同样的事情.以下是我想要改变图例中字体颜色的方法.我对这种方法并不完全满意,因为它似乎有点笨拙,但它似乎完成了工作[编辑:见下面的更好的方法]:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
colors = []
for i in xrange(5):
line, = ax.plot(x, i * x, label='$y = %ix$' % i)
colors.append(plt.getp(line,'color'))
leg = ax.legend()
for color,text in zip(colors,leg.get_texts()):
text.set_color(color)
plt.show()
Run Code Online (Sandbox Code Playgroud)
2016编辑:
实际上,有一种更好的方法.您可以简单地遍历图例中的线条,这样可以避免在绘制线条时跟踪颜色.不那么笨重了.现在,改变线条颜色基本上是一个单行(好吧,它实际上是一个双线).这是完整的例子:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
ax.plot(x, i*x, label='$y = %ix$'%i)
leg = ax.legend()
# change the font colors to match the line colors:
for line,text in zip(leg.get_lines(), leg.get_texts()):
text.set_color(line.get_color())
plt.show()
Run Code Online (Sandbox Code Playgroud)
2017编辑:最后,如果你真的想要颜色编码的文本而不是一行(如标题所示),那么你可以通过使用来抑制图例中的线条
leg = ax.legend(handlelength=0)
Run Code Online (Sandbox Code Playgroud)
只需设置linewidth
图例句柄:
In [55]: fig, ax = plt.subplots()
In [56]: x = np.arange(10)
In [57]: for i in xrange(5):
....: ax.plot(x, i * x, label='$y = %ix$' % i)
....:
In [58]: leg = ax.legend(loc='best')
In [59]: for l in leg.legendHandles:
....: l.set_linewidth(10)
....:
Run Code Online (Sandbox Code Playgroud)
通过图例文本getter/setter和轴线getter/setter完成所有绘图后,可以干净地完成此操作.在绘图之前,将图例文本颜色设置为与for循环中的线颜色相同.
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
ax.plot(x, i * x, label='$y = %ix$' % i)
leg = ax.legend()
def color_legend_texts(leg):
"""Color legend texts based on color of corresponding lines"""
for line, txt in zip(leg.get_lines(), leg.get_texts()):
txt.set_color(line.get_color())
color_legend_texts(leg)
plt.show()
Run Code Online (Sandbox Code Playgroud)
在这个答案中要注意的主要区别是格式化绘图可以完全与绘图操作分离.