【发布时间】:2014-06-19 10:59:08
【问题描述】:
在 python 的 matplotlib 中,对于一篇关于牛顿方法的文章,我想在折线图中可视化前三个迭代和最后一个迭代,其中每个迭代显示为一条单独的曲线。图例标签将类似于“迭代 1”、“迭代 2”、“迭代 3”、“迭代 14”。为了清楚起见,我想在视觉上从最后一个偏移前三个,或者用一些空白,或者最好用一个三点来表示跳跃。有人知道实现这一目标的方法吗?
【问题讨论】:
标签: python matplotlib legend
在 python 的 matplotlib 中,对于一篇关于牛顿方法的文章,我想在折线图中可视化前三个迭代和最后一个迭代,其中每个迭代显示为一条单独的曲线。图例标签将类似于“迭代 1”、“迭代 2”、“迭代 3”、“迭代 14”。为了清楚起见,我想在视觉上从最后一个偏移前三个,或者用一些空白,或者最好用一个三点来表示跳跃。有人知道实现这一目标的方法吗?
【问题讨论】:
标签: python matplotlib legend
您可以显示 2 个图例。第一次进行了 3 次迭代,第二次进行了最后一次迭代:
l1 = plt.legend(data_for, 3_iterations, loc=[1.01,0.6])
l2 = plt.legend(data_for, last_iteration, loc=[1.01,0.2])
plt.gca().add_artist(l1) # to add back first legend
loc 允许您选择图例的位置。这里它将在图的右侧,l1 在 l2 上方。您可以修改它以使其尽可能清晰。
对于三个点,您可以使用 plt.text(x,y,"...") 添加它们,其中 x 和 y 是您想要的坐标 '...'。
如果您使用代码编辑问题,并提供一个工作示例,我可能会更准确。
其他解决方案:
假设leg 是图例对象,您可以移动图例的某些部分。例如,如果您想移动图例的第二行 ([1]):
L2 = leg.get_lines()[1]
L2.set_ydata(np.array(L2.get_ydata())-2) # move down of 2 units the line (in the legend based coordinates)
移动相关文本:
T2 = leg.texts[1]
T2.set_y(-2)
对于框架:
frame = leg.get_frame()
frame.set_height(frame.get_height()+20)
对于框架,它实际上对我不起作用,我不知道为什么。也许它会为你工作。 或者,您可以使用:
leg=plt.legend(borderpad=2)
一步一步,你可以设置你的图例。虽然可能很长,我会选择第一个选项,因为您可以移除框架,它不会被注意到。
希望对你有帮助
【讨论】: