当前位置: 首页 > 面试题库 >

向LineCollection打印添加图例

勾学博
2023-03-14
问题内容

这是一个衍生问题,与[Set line colors]中给出的答案有关
根据颜色图](https://stackoverflow.com/questions/19868548/set-line-
颜色(根据colormap),其中有一个伟大的解决方案是建议绘图
根据颜色条用颜色表示的几行(参见代码和输出图像
以下)。
我有一个列表,其中存储与每一条打印线相关联的字符串,如下所示:

legend_list = ['line_1', 'line_2', 'line_3', 'line_4']

我想将这些字符串作为图例添加到一个框中(其中第一个字符串
对应于图右上角的第一条绘制线(以此类推)
情节。我怎么能这么做?
如果有必要的话,我可以不使用“LineCollection”,但我必须这样做
保留colorbar和与之关联的每行的颜色。

Code and output

import numpy
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

# The line format you curently have:
lines = [[(0, 1, 2, 3, 4), (4, 5, 6, 7, 8)],
         [(0, 1, 2, 3, 4), (0, 1, 2, 3, 4)],
         [(0, 1, 2, 3, 4), (8, 7, 6, 5, 4)],
         [(4, 5, 6, 7, 8), (0, 1, 2, 3, 4)]]

# Reformat it to what `LineCollection` expects:
lines = [zip(x, y) for x, y in lines]

z = np.array([0.1, 9.4, 3.8, 2.0])

fig, ax = plt.subplots()
lines = LineCollection(lines, array=z, cmap=plt.cm.rainbow, linewidths=5)
ax.add_collection(lines)
fig.colorbar(lines)

# Manually adding artists doesn't rescale the plot, so we need to autoscale
ax.autoscale()

plt.show()

问题答案:

@ubuntu的答案是正确的方法,如果你有少量的行。(和
如果你想添加一个传奇,你可能会这样做!)
不过,为了显示另一个选项,您仍然可以使用“LineCollection”,
您只需为图例使用“代理艺术家”:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.lines import Line2D

# The line format you curently have:
lines = [[(0, 1, 2, 3, 4), (4, 5, 6, 7, 8)],
         [(0, 1, 2, 3, 4), (0, 1, 2, 3, 4)],
         [(0, 1, 2, 3, 4), (8, 7, 6, 5, 4)],
         [(4, 5, 6, 7, 8), (0, 1, 2, 3, 4)]]

# Reformat it to what `LineCollection` expects:
lines = [tuple(zip(x, y)) for x, y in lines]

z = np.array([0.1, 9.4, 3.8, 2.0])

fig, ax = plt.subplots()
lines = LineCollection(lines, array=z, linewidths=5,
                       cmap=plt.cm.rainbow, norm=plt.Normalize(z.min(), z.max()))
ax.add_collection(lines)
fig.colorbar(lines)

# Manually adding artists doesn't rescale the plot, so we need to autoscale
ax.autoscale()

def make_proxy(zvalue, scalar_mappable, **kwargs):
    color = scalar_mappable.cmap(scalar_mappable.norm(zvalue))
    return Line2D([0, 1], [0, 1], color=color, **kwargs)
proxies = [make_proxy(item, lines, linewidth=5) for item in z]
ax.legend(proxies, ['Line 1', 'Line 2', 'Line 3', 'Line 4'])

plt.show()


 类似资料:
  • 这是一个衍生问题,与根据颜色图设置线条颜色中给出的答案相关,其中一个很好的解决方案是根据颜色条绘制几条带有颜色的线条(见下面的代码和输出图像)。 我有一个列表,其中存储了与每个打印线关联的字符串,如下所示: 我想将这些字符串作为图例添加到绘图右上角的一个框中(第一个字符串对应于第一条绘制线,依此类推)。我怎么能这样做? 如果有必要,我可以不使用,但我需要保留颜色栏以及与之相关的每一行的颜色。 代码

  • 这个问题已经被问到了,但我想找到一个更清楚的解决办法。 给定X是100x2数据,标签是标签向量(从1到9),我绘制散点图如下: 如何添加图例来解释一行代码中的颜色?其他解决方案分别绘制每个标签:

  • 问题内容: 我正在尝试重现Firefox或Safari的搜索字段或本页右上方的搜索字段的行为。 我的意思是,当editable上没有文本时,将显示指令文本,诸如此类。当集中的文本被删除。如果焦点丢失而没有键入任何文本,则说明文本会返回。 问题答案: 注意: 请查看文本提示,以更完整地实现以下代码,并提供更多功能。 我把一些简单的东西放在一起。我敢肯定你可以整理一下。由于代码可以在JTextFiel

  • 我正在使用将多个数据帧绘制为点图。此外,我正在同一轴上绘制所有数据帧。 我该如何在情节中加入传奇? 我的代码获取每个数据帧,并在同一个图形上一个接一个地绘制它。 每个数据框都有相同的列 我的代码: 这将在同一绘图上绘制3条线。然而,这个传说却不见了。文档不接受参数。 一个有效的解决方法是创建一个新的数据帧并使用。 但是我想知道是否有一种方法可以为代码创建一个图例,首先向图中依次添加点图,然后添加图

  • 我有一个gejson文件,它由覆盖着六边形多边形的纽约市组成,我把它读进了geopandas数据框。我希望在数据框的图中添加Stmen TonerLite底图。但是,我无法复制与这里的工作示例相同的结果-https://geopandas.org/gallery/plotting_basemap_background.html 我在下面给出了相关数据帧的代码和crs的一个小示例: 我得到了一个没有

  • 主要内容:ImageDraw,ImageFont,添加图片水印为图片添加水印能够在一定程度上避免其他人滥用您的图片,这是保护图片版权的一种有效方式。因此,当您在微博、或者博客等一些公众平台分享图片的时候,建议您为自己的图片添加一个水印,来证明这张图片属于您。 添加水印的方式的有很多种,比如通过一些图像处理软件,或者手机美图软件都可以实现添加水印的操作,但是这种操作比较复杂,甚至有些软件还不是免费的。 Pillow 库提供了添加水印的方法,操作简单,易学、易用