gpt4 book ai didi

python - 多行自定义图例,同一文本有两个标记

转载 作者:行者123 更新时间:2023-11-28 22:17:10 25 4
gpt4 key购买 nike

我想执行如图 enter image description here 所示的图例类型。

这个图我用了一些技巧来表示我真正想要的东西,所以它不能很好地显示图例中粉红色标记的颜色。

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

代码:

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

enter image description here

关于python - 多行自定义图例,同一文本有两个标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com