python图例重复显示_python – 具有两个标记的多行的自定义图例,用于相同的文本...

我想执行图中所示的图例类型.

这个数字我做了一些技巧只是为了表示我真正想要的东西,所以它没有很好地展示传奇中粉红色标记的颜色.

在图中,圆圈表示相同的参数,但是对于两个不同的模型;三角形和方形标记也是如此.我想将两个圆形标记放在图例的第一行中的相同参数上,类似地放在这个下面的两行上的其他标记上.谢谢.

码:

import matplotlib.pyplot as plt

q1 = [100.0, 60.0, 200.0, 300.0]

NO1 = [0.35799999999999998, 0.33100000000000002, 0.22900000000000001, 0.17799999999999999]

No1 = [0.34599999999999997, 0.29899999999999999, 0.20699999999999999, 0.14999999999999999]

Nb1 = [0.46600000000000003, 0.45600000000000002, 0.27800000000000002, 0.24399999999999999]

q2 = [60.0, 100.0, 200.0, 300.0]

NO2 = [0.44700000000000001, 0.29199999999999998, 0.28299999999999997, 0.253]

No2 = [0.38900000000000001, 0.28499999999999998, 0.311, 0.251]

Nb2 = [0.44, 0.34899999999999998, 0.45900000000000002, 0.39400000000000002]

fig, ax = plt.subplots(figsize = (6,3))

ax.plot(q1, NO1, marker = 'o', markerfacecolor = 'none', markeredgewidth = 1, color = 'gray', linestyle = '', markersize = 8, label = '$N$in parameter a')

ax.plot(q2, NO2, marker = 'o', markerfacecolor = 'none', markeredgewidth = 1, color = 'palevioletred', linestyle = '', markersize = 8)#, label = '$N$in parameter a')

ax.plot(q1, No1, marker = '^', markerfacecolor = 'none', markeredgewidth = 1, color = 'gray', linestyle = '', markersize = 8, label = '$N$in parameter b')

ax.plot(q2, No2, marker = '^', markerfacecolor = 'none', markeredgewidth = 1, color = 'palevioletred', linestyle = '', markersize = 8)#, label = '$N$in parameter b')

ax.plot(q1, Nb1, marker = 's', markerfacecolor = 'none', markeredgewidth = 1, color = 'gray', linestyle = '', markersize = 8, label = '$N$in parameter c')

ax.plot(q2, Nb2, marker = 's', markerfacecolor = 'none', markeredgewidth = 1, color = 'palevioletred', linestyle = '', markersize = 8)#, label = '$N$in parameter c')

#plt.legend(loc='upper right', bbox_to_anchor=(0.945, 1))

plt.xlabel('x')

plt.ylabel('$N$')

plt.xticks([60, 100, 200, 300])

plt.minorticks_on()

plt.tick_params(direction = 'in', bottom = True, top = True, left = True, right = True, which = 'major')

plt.tick_params(direction = 'in', bottom = False, top = False, left = True, right = True, which = 'minor')

解决方法:

您可以使用HandlerTuple处理程序并提供艺术家的元组,以在每行中显示为图例的句柄.

import matplotlib.pyplot as plt

import matplotlib.legend_handler

q1 = [100.0, 60.0, 200.0, 300.0]

NO1 = [0.358, 0.331, 0.229, 0.178]

No1 = [0.346, 0.299, 0.207, 0.15]

Nb1 = [0.466, 0.456, 0.278, 0.244]

q2 = [60.0, 100.0, 200.0, 300.0]

NO2 = [0.447, 0.292, 0.283, 0.253]

No2 = [0.389, 0.285, 0.311, 0.251]

Nb2 = [0.44, 0.349, 0.459, 0.394]

fig, ax = plt.subplots(figsize = (6,3))

prop = dict(markerfacecolor = 'none', markeredgewidth = 1,

linestyle = '', markersize = 8,)

l1, = ax.plot(q1, NO1, marker = 'o', color = 'gray', label = '$N$in parameter a', **prop)

l2, = ax.plot(q2, NO2, marker = 'o', color = 'palevioletred', **prop)

l3, = ax.plot(q1, No1, marker = '^', color = 'gray', label = '$N$in parameter b', **prop)

l4, = ax.plot(q2, No2, marker = '^', color = 'palevioletred', **prop)

l5, = ax.plot(q1, Nb1, marker = 's', color = 'gray', label = '$N$in parameter c', **prop)

l6, = ax.plot(q2, Nb2, marker = 's', color = 'palevioletred', **prop)

handles = [(l1,l2), (l3,l4), (l5,l6)]

_, labels = ax.get_legend_handles_labels()

ax.legend(handles = handles, labels=labels, loc='upper right',

handler_map = {tuple: matplotlib.legend_handler.HandlerTuple(None)})

plt.xlabel('x')

plt.ylabel('$N$')

plt.show()

标签:python,matplotlib,legend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值