【Matplotlib】(二)图例legend

2024-08-27 17:08
文章标签 matplotlib 图例 legend

本文主要是介绍【Matplotlib】(二)图例legend,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Matplotlib 的 Legend 图例就是为了帮助我们展示每个数据对应的图像名称,更好的让读者认识到你的数据结构。

如图,红色标注部分就是 Legend 图例。

在之前的一篇文章 Matplotlib 系列之「绘制函数图像」 中已经细讲过 Matplotlib 的绘制过程以及结构分析,希望读者能先去了解一下。

接着上一次的代码继续讲解 Legend 图例如何展示,以及有哪些常用的特性。

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2plt.figure(num=3,figsize=(8,5))
l1=plt.plot(x,y2)
l2=plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')plt.legend(handles=[l1,l2],labels=['up','down'],loc='best')plt.xlabel('x')
plt.ylabel('y')plt.xlim((-1,2))
plt.ylim((-2,3))new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)
plt.yticks([-2,-1.8,-1,1.22,3],[r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))plt.show()

上一节中仔细绘制了 Matplotlib 的图像结构,现在可以进行回顾一下。

Title 为图像标题,Axis 为坐标轴, Label 为坐标轴标注,Tick 为刻度线,Tick Label 为刻度注释,Legend 为图例。

设置 Legend 图例

这里我们将 Legend 图例设置成 如上图中所示,即 up 对应 y = 2x + 1,是一条实线,默认颜色,down 对应 y = x^2^ ,虚线,红色,最后调用 legend 方法设置一些样式即可。

# 设置 legend 图例
l1,=plt.plot(x,y1,label='linear line')
l2,=plt.plot(x,y2,color='red',linewidth=1.0,linestyle='--',label='square line')plt.legend()

不带参数调用 legend 会自动获取图例句柄及相关标签,此函数等同于:

handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels)

为完全控制要添加的图例句柄,通常将适当的句柄直接传递给 legend:

plt.legend(handles=[l1, l2])

在某些情况下,我们需要为 legend 图例设置标签

plt.legend(handles=[l1, l2], labels=['up', 'down'])

 

图例的位置

图例的位置可以通过关键字参数loc指定。 bbox_to_anchor关键字可让用户手动控制图例布局。 例如,如果你希望轴域图例位于图像的右上角而不是轴域的边角,则只需指定角的位置以及该位置的坐标系:

当我们指定 loc = 'upper right',legend 图例将在右上角展示:

你还可以指定 loc 在任何你想要指定的位置:

plt.legend(handles=[l1, l2], labels=['up', 'down'],  loc='lower right')

 

loc 使用参数

整数,字符串或浮点偶对,默认为 'upper right'。

Legend 常见参数速查表

KeywordDescriptionlocLocation code string, or tuple (see below)fontsizethe font size (used only if prop is not specified)propthe font propertymarkerscalethe relative size of legend markers vs. originalmarkerfirstIf True (default), marker is to left of the labelnumpointsthe number of points in the legend for linescatterpointshe number of points in the legend for scatter plotscatteroffsetsa list of yoffsets for scatter symbols in legendframeonIf True, draw the legend on a patch (frame)shadowIf True, draw a shadow behind legendframealphaTransparency of the frameedgecolorFrame edgecolorfacecolorFrame facecolorfancyboxIf True, draw the frame with a round fancyboxncolnumber of columnsborderpadthe fractional whitespace inside the legend borderhandlelengththe length of the legend hendleshandletextpadThe pad between the legend handle and textborderaxespadthe pad between the axes and legend bordercolumnspacingthe spacing between columnstitlethe legend titlebbox_to_anchorthe bbox that the legend will be anchoredbbox_tansformthe transform for the bbox,transAxes if None

图例处理器

为了创建图例条目,将句柄作为参数提供给适当的HandlerBase子类。 处理器子类的选择

有以下规则确定:

  • 使用handler_map关键字中的值更新get_legend_handler_map()
  • 检查句柄是否在新创建的handler_map中。
  • 检查句柄的类型是否在新创建的handler_map中。
  • 检查句柄的mro中的任何类型是否在新创建的handler_map中。

处于完整性,这个逻辑大多在get_legend_handler()中实现。

为了简单起见,让我们选择matplotlib.legend_handler.HandlerLine2D,它接受numpoints参数(出于便利,注意numpointslegend()函数上的一个关键字)。 然后我们可以将实例的字典作为关键字handler_map传给legend

import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerLine2D# 设置legend图例
l1,=plt.plot(x,y1,marker = 'o',label='linear line')
l2,=plt.plot(x,y2,color='red',linewidth=1.0,marker = 'o',label='square line')plt.legend(handler_map = {l1:HandlerLine2D(numpoints=4)},handles=[l1, l2], labels=['up', 'down'],  loc='lower right')

 如你所见,up现在有 4 个标记点,down有两个(默认值)。

参考

1. Matplotlib 系列之「Legend 图例」 - 知乎

这篇关于【Matplotlib】(二)图例legend的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112265

相关文章

matplotlib绘图中插入图片

在使用matplotlib下的pyplot绘图时,有时处于各种原因,需要采用类似贴图的方式,插入外部的图片,例如添加自己的logo,或者其他的图形水印等。 一开始,查找到的资料都是使用imshow,但是这会有带来几个问题,一个是图形的原点发生了变化,另外一个问题就是图形比例也产生了变化,当然最大的问题是图形占据了整个绘图区域,完全喧宾夺主了,与我们设想的只在绘图区域中占据很小的一块不相符。 经

matplotlib中文乱码问题

在使用Matplotlib进行数据可视化的过程中,经常会遇到中文乱码的问题。显示乱码是由于编码问题导致的,而matplotlib 默认使用ASCII 编码,但是当使用pyplot时,是支持unicode编码的,只是默认字体是英文字体,导致中文无法正常显示,所以显示中文乱码。 文本使用系统默认字体、手动指定字体、使用字体管理器来解决。 一、系统默认字体(全局设置字体) 在Matplotlib中

Matplotlib图像读取和输出及jpg、png格式对比,及透明通道alpha设置

图像像素值 图像像素值一般size为3,也就是通道数,分别代表R,G,B,如果只有单一 一个值则表示灰度值,也就是说一张二维图片,当长和宽都为1080时,那么若是灰度图像,图像尺寸为(1080,1080,1)若是RGB图像则为(1080,1080,3), jpg、png图像格式 jpg图像的灰度值范围和RGB范围为[0,255],数值类型为uint8,也就是无符号整数 png图像的灰度值范

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

透析SPFA算法(图例讲解)

SPFA算法是Bellman-Ford的队列优化,所以先介绍Bellman-Ford算法。        Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。这时候,就需要使用其他的算法来求解最短路径,Bellman-

Matplotlib通过axis()配置坐标轴数据详解

坐标轴范围设置 axis()可以直接传入列表[xmin,xmax,ymin,ymax]进行范围设置, 分别可以使用plt.axis()或者画布对象.axis()进行配置 import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 20, 100)y = x*2plt.plot(x, y, 'r')plt.ax

【python 图像切割】matplotlib读取图像,裁剪图像

#-*-coding:utf-8-*-import sysreload(sys)sys.setdefaultencoding('utf-8')import matplotlib.pylab as plt# 加载图像im = plt.imread("E:/ID/2.png")print(im.shape)# (y轴像素点数, x轴像素点数,图像通道数)def plti(im, **kw

怎么使用matplotlib绘制一个从-2π到2π的sin(x)的折线图-学习篇

首先:如果你的环境中没有安装matplotlib,使用以下命令可以直接安装 pip install matplotlib 如何画一个这样的折线图呢?往下看 想要画一个简单的sin(x)在-2π到2π的折线图,我们要拆分成以下步骤: 先导入相关的库文件 我们需要创建一个数学函数相关的图,需要引入 numpy 我们需要绘制图表,所以需要引入matplotlib来绘制图表创建一个x值的数组从

解决matplotlib中文乱码最简单方案

解决matplotlib中文乱码问题方案众多,我认为如下方案是最简单的一个。 1、从电脑中搜索simhei字体,如下示意图是mac检索结果,或者直接搜索simhei.ttf下载字体 拷贝到指定路径:/path/to/mex/simhei.ttf  2、matplotlib 加载字体 def plot_with_chinese():     import matplotlib.pyp

Matplotlib详解 - PlotType : Pairwise data

1. 前言 Pairwise data(成对数据)指的是在数据集中,数据点是以成对的形式出现的,通常用于分析两者之间的关系或比较。在成对数据中,数据点通常是以两个变量的组合出现的,代表两个实体、两个属性或两个观测值之间的关系。 本篇文章讲解成对数据的可视化形式 2. plot()折线图 用途:最常见的折线图绘制函数,用于绘制连续数据的趋势 适用场景:绘制简单的线性或非线性关系,比