python-3.x - matplotlib 图例仅基于线条样式而不是颜色
问题描述
我在一个图中以不同的样式和颜色为两种不同的算法绘制两个指标的值。我对不同的算法使用不同的风格,对不同的指标使用不同的颜色。我希望图例仅基于线条样式。
我的代码是
#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
x = np.arange(0,4)
fig, ax1 = plt.subplots(frameon=False)
d_gc = np.array([1.718,1.742,1.778,1.0])
q_gc = np.array([1.709,1.737,1.761,0.98])
p1 = ax1.plot(x,d_gc,'bs--',label='A1')
p2 = ax1.plot(x,q_gc,'bs:',label='A2')
ax1.set_ylabel('GC',color='b',size=13)
ax1.set_ylim([0.9,2])
ax2 = ax1.twinx()
d_df = np.array([1.00, 1.958, 1.982, 1.995])
q_df = np.array([0.97, 1.930, 1.973, 1.994])
ax2.plot(x,d_df,'cv--')
ax2.plot(x,q_df,'cv:')
ax2.set_ylabel('DF',color='c',size=13)
ax2.set_ylim([0.9,2])
ax1.xaxis.set_minor_locator(MaxNLocator(20))
ax1.grid(which='minor', alpha=0.25)
ax1.grid(which='major', alpha=0.5)
p = p1 + p2
labs = [l.get_label() for l in p]
lgd = ax1.legend(p, labs, bbox_to_anchor=(1.0,0.22),loc=0, ncol = 2, fontsize='11',shadow=True,fancybox=True)
fig.savefig('plot.pdf',format='pdf',transparent=True, bbox_extra_artists=(lgd,), bbox_inches='tight')
在上面的图例中带有不同的颜色。但是我有不同颜色的度量 GC 和 DF 以及不同风格的算法“A1”和“A2”。我希望图例是具有不同线条样式的黑色。legend
是否可以使用函数来做到这一点?
解决方案
所以如果你只希望图例中的线条是黑色的,这很容易通过简单的列表理解和legendHandle来完成,就像这样(它必须在你创建图例之后插入,在lgd = ...
leg = ax1.get_legend()
[lgd.set_color('black') for lgd in leg.legendHandles]
否则,您可以使用创建两条自定义线mlines
并设置markersize = 0
然后您只有线型
import matplotlib.lines as mlines
labs = [l.get_label() for l in p]
black_line = mlines.Line2D([], [], color='black', marker='s',linestyle="--",
markersize=0, label=labs[0])
black_line2 = mlines.Line2D([], [], color='black', marker='s',linestyle=":",
markersize=0, label=labs[1])
lgd = ax1.legend(p, labs, bbox_to_anchor=(1.0, 0.22), loc=0, ncol=2,
fontsize='11', shadow=True, fancybox=True,numpoints=2,
handles=[black_line,black_line2])
在下图中,为了方便起见,我将图例的位置更改为loc = 2
推荐阅读
- java - Android : 如何将 QA 构建变体添加到内部测试轨道以测试 Android 的应用内更新 API?
- powershell - PowerShell 计划任务:打开 PowerShell 和要运行的脚本,但不执行脚本
- firebase - 将 additonalUserInfo 对象从 Flutter 中的 FirebaseAuthService 类传递给 User 模型
- java - 如何在 Apache Camel >= 3 中配置路由跟踪?
- java - 当需要执行操作以生成新事件时,如何测试服务器发送事件 API(用 Spring 5 Webflux 编写)?
- reactjs - iPhone添加到主屏幕空白页
- android - ListAdapter 中的 Kotlin 泛型问题
- vnc-viewer - Mobaxterm 无法使用 vnc 会话
- python - 在保留顺序的同时更改列表中的某些数据类型
- simulation - 根据 if 语句复制海龟变量