正如问题所说,我有一个轮廓图,我想展示if的传奇。
我使用的轮廓图样式使用:
消极级别的虚线行
正值的实体行
我想为他们设一个传奇(虚线==负面和实体==正面)。
我尝试了here和here找到的方法。但是,如下所示,这并没有显示正确的结果。
# Draw the scalar field level curves
div_field = plt.contour(x, y, div_scalar_field, colors='white')
rot_field = plt.contour(x, y, rot_scalar_field, colors='lightgoldenrodyellow')
labels = ['Div Neg', 'Div Pos', 'Rot Neg', 'Rot Pos']
div_field.collections[0].set_label(labels[0])
div_field.collections[-1].set_label(labels[1])
rot_field.collections[0].set_label(labels[2])
rot_field.collections[-1].set_label(labels[3])
正如我在 div标量字段中我只有正面水平,我有两个具有相同线条样式的标签。
我想知道如何才能达到我想要的目的。
提前谢谢。
答案 0 :(得分:1)
我可以手动设置图例(我不知道这是不是最好的方法):
div_neg = plt.Line2D((0, 1), (0, 0), color='white', linestyle='--', linewidth=2)
div_pos = plt.Line2D((0, 1), (0, 0), color='white', linestyle='-', linewidth=2)
rot_neg = plt.Line2D((0, 1), (0, 0), color='lightgoldenrodyellow', linestyle='--', linewidth=2)
rot_pos = plt.Line2D((0, 1), (0, 0), color='lightgoldenrodyellow', linestyle='-', linewidth=2)
plt.legend([rot_max, div_neg, div_pos, rot_neg, rot_pos],
['Rot Max Points', 'Div Neg', 'Div Pos', 'Rot Neg', 'Rot Pos'])
答案 1 :(得分:0)
类似于以下内容的方法对我起作用-完整的技巧是使用标记的虚拟点,获取其颜色,将其应用于轮廓,然后以常规方式绘制图例:
import matplotlib as plt
labels = ['div_field'] # etc.
dummy_position = [-1.0e3,-1.0e3] # Could automate
colors = []
for k in labels:
# Fetch colours via a dummy point
dummy_point = plt.plot(dummy_position[0],dummy_position[1], label = k)
c = dummy_point[-1].get_color()
colors.append(c)
# This is specific to your problem, but roughly:
div_field = plt.contour(x, y, div_scalar_field, colors=c)
# etc.
_=plt.legend()
plt.savefig('contours.pdf')
希望如此。