图例可以为可视化赋予实际含义,为不同的图标元素附上明确说明。我们前面看到了一些简单的图例创建例子;本小节中我们来介绍一下在 Matplotlib 中自定义图例的位置和进行美化的方法。

可以使用plt.legend()函数来创建最简单的图例,这个函数能自动创建任何带有标签属性的图表元素的图例:

import matplotlib.pyplot asplt

plt.style.use('classic')

import numpyasnp

x= np.linspace(0, 10, 1000)

fig, ax=plt.subplots()

ax.plot(x, np.sin(x),'-b', label='Sine')

ax.plot(x, np.cos(x),'--r', label='Cosine')

ax.axis('equal')

leg=ax.legend();

plt.show()

但除此之外还有很多能自定义图例的方法。例如,我们可以指定图例位置并且去除边框:

ax.legend(loc='upper left', frameon=False)

fig

我们可以使用ncol属性设置图例中每行的列数:

ax.legend(frameon=False, loc='lower center', ncol=2)

fig

还可以使用圆角方框(fancybox)或者增加阴影,设置方框的透明度(alpha 值)或修改文字的边距:

ax.legend(fancybox=True, framealpha=1, shadow=True, borderpad=1)

fig

要获取更多 legend 函数的可用选项信息,请参考plt.legend的文档字符串。

选择设置图例的元素

正如我们前面例子所示,绘制的图例默认包括所有带标签的元素。如果这不是想要的效果,我们可以调整哪些元素和标签会出现在图例当中,这可以通过设置plot 函数或方法返回的对象实现。plt.plot函数能够同时产生多条折线,然后将这些线条的实例列表返回。将其中的部分实例传递到plt.legend()函数就能设置哪些线条会出现在图例中,再通过一个标签的列表指定图例的名称:

y = np.sin(x[:, np.newaxis] + np.pi * np.arange(0, 2, 0.5))

lines=plt.plot(x, y)

# lines是一个线条实例的列表

plt.legend(lines[:2], ['first', 'second']);

作者更加倾向于使用第一种方式,因为更加清晰。通过将标签应用在图表元素上,然后绘制到图例中:

plt.plot(x, y[:, 0], label='first')

plt.plot(x, y[:,1], label='second')

plt.plot(x, y[:,2:])

plt.legend(framealpha=1, frameon=True);

请注意默认情况下,legend 会忽略所有不带标签的元素。

散点大小的图例

某些情况下默认的图例不足以满足特定的可视化需求。例如,你在使用散点的大小来标记数据的某个特征,然后希望创建一个相应的图例。下面的例子是加州城市人口的散点图(你们可以用自己文件替换),我们使用散点的大小表现该城市的面积,散点的颜色来表现城市的人口数量(自然对数值)。我们希望使用一个图例来指明散点尺寸的比例,同时用一个颜色条来说明人口数量,我们可以通过自定义绘制一些标签数据来实现尺寸图例:

译者注:新版 Matplotlib 已经取消 aspect 参数,此处改为使用新的'scaled'参数调用 axis 函数。

import pandas aspd

cities= pd.read_csv(r'D:\python\Github学习材料\Python数据科学手册\data\california_cities.csv')

# 提取我们感兴趣的数据

lat, lon= cities['latd'], cities['longd']

population, area= cities['population_total'], cities['area_total_km2']

# 绘制散点图,使用尺寸代表面积,颜色代表人口,不带标签

plt.scatter(lon, lat, label=None,

c=np.log10(population), cmap='viridis',

s=area, linewidth=0, alpha=0.5)

plt.axis('scaled')

plt.xlabel('longitude')

plt.ylabel('latitude')

plt.colorbar(label='log$_{10}$(population)')

plt.clim(3, 7)

# 下面我们创建图例:

# 使用空列表绘制图例中的散点,使用不同面积和标签,带透明度for area in [100, 300, 500]:

plt.scatter([], [], c='k', alpha=0.3, s=area,

label=str(area) + 'km$^2$')

plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='City Area')

plt.title('California Cities: Area and Population');

之前的图例都关联着图表上的一些对象,因此如果我们需要展示图例的话我们首先需要绘制图表元素。在上例中,我们需要的图例对象(灰色圆圈)不在图表上,因此我们采用绘制空列表的方式将它们仿造在图表上(实际上图上没有点),但是还是需要注意,只有那些带标签的元素才会出现在图例中。

通过绘制空列表,我们创建了三个带标签的对象,然后就可以出现在图例当中,这个图例就能表示出有关城市面积的相关信息。这个策略在很多复杂可视化图表构建过程中都被用到。

最后我们注意到这个图表实际上是一个地理位置图表,如果我们能在上面绘制州界线或其他地图相关的元素的话,会更加清晰。Matplotlib 提供了一个 Basemap 额外工具集来实现这个目标。

多重图例

有时候我们可能需要在同一个图表维度中设计多个图例。不幸的是,Matplotlib 并没有提供很简单的方式实现:通过标准的legend接口,只能在整张图表上创建一个图例。如果你试图使用plt.legend()或ax.legend()创建第二个图例,那么第二条语句创建的图例会覆盖第一条语句创建的。我们只能通过从底层开始来创建一个新的图例 artist 这种方法来解决这个问题,然后使用ax.add_artist()的底层方法手动将第二个作者加到图表上:

fig, ax =plt.subplots()

lines=[]

styles= ['-', '--', '-.', ':']

x= np.linspace(0, 10, 1000)for i in range(4):

lines+= ax.plot(x, np.sin(x - i * np.pi / 2),

styles[i], color='black')

ax.axis('equal')

# 指定第一个图例的线条和标签

ax.legend(lines[:2], ['line A', 'line B'],

loc='upper right', frameon=False)

# 手动创建第二个图例,并将作者添加到图表中frommatplotlib.legend import Legend

leg= Legend(ax, lines[2:], ['line C', 'line D'],

loc='lower right', frameon=False)

ax.add_artist(leg);

plt.show()

上例展示了用来组成任何 Matplotlib 图表的底层 artist 对象的简单说明。如果你去查看ax.legend()的源代码(你可以通过 IPython 的ax.legend?帮助工具做到),你可以看到这个方法包含了用来构建合适Legend的 artist 对象的逻辑,构建的对象被保存在legend_属性当中,当绘制时被添加到图表上进行展示.

plt绘图加图标_Matplotlib基础--自定义图标图例相关推荐

  1. 百度地图Javascript使用海量点加载数据并自定义图标

    ** 百度地图Javascript使用海量点加载数据并自定义图标 由于数据量较大时使用Marker点在地图上标点会造成浏览器卡死,点聚合的形式可以解决数据量大浏览器卡死问题,但是移除点时点聚合不太好用 ...

  2. qss 更改图标_Qt实现自定义图标功能

    Qt实现自定义图标功能 ​ 作者:hackett ​ ​ 微信公众号:加班猿 ​ 在上一节的基础上进行定义图标的功能 效果:要做的是应用的放大缩小.最小化功能,鼠标移动和点击图标变色 准备工作: 控件 ...

  3. u盘中的android文件夹图标不显示,U盘中文件夹怎么设置自定义图标而不变样

    在U盘里面,装着各种各样的资料文件,除了文件夹外,还有不少的图标文件(如*.ico,*.exe等).U盘的文件夹的图标有时会随着文件夹的移动而变样或者失效,有什么办法可以将文件夹图标换成自定义图标而不 ...

  4. ionic自定义图标(ion-icon)

    背景 ionic自带图标库有限,不能满足项目里面各种图标,需要自定义图标. 开始 下载图标库 从iconfont.cn上面搜索想要的图标,添加入库(也就是购物车那个图标) 添加到项目里面,一个项目肯定 ...

  5. 鼠标图标怎么自定义_苹果ios14怎么自定义图标 图标位置自由排列换风格教程

    苹果ios14怎么自定义图标 图标位置自由排列换风格教程 iOS 14 发布后,自定义主屏幕图标成为了一种流行的趋势,一些用户通过「快捷指令」将默认的应用图标替换为自定义图标,然后将应用本来的图标隐藏 ...

  6. Echarts地图自定义图标Symbol同时动态更改图标进行切换显示

    Echarts地图自定义图标Symbol同时动态更改图标进行切换显示 文章目录 0.前言 1.引用模块 2.界面设计 3.数据准备 4.实例地图 5.动态修改气泡图标 6.结束语 0.前言 实现的效果 ...

  7. GIS定位和自定义图标

    开发工具与关键技术:VS软件,GIS定位和自定义图标 作者:陈隆 撰写时间:2020年05月02日 说到GIS可能很多人都很陌生吧,其实只有没接触过的就肯定是不知道这到底是什么来的,可能知道GPS的比 ...

  8. 如何调换手机桌面位置_苹果ios14怎么自定义图标 图标位置自由排列换风格教程...

    苹果ios14怎么自定义图标 图标位置自由排列换风格教程 iOS 14 发布后,自定义主屏幕图标成为了一种流行的趋势,一些用户通过「快捷指令」将默认的应用图标替换为自定义图标,然后将应用本来的图标隐藏 ...

  9. element自定义图标;element自定义icon;element-ui自定义tab栏图标;

    一.场景:element-ui本身提供了图标,但是不全面或者开发时候需要使用自定义图标展示.此时可以用到elemenUi的自定义图标.参考链接 二.html使用,和正常的element的 图标 i 标 ...

最新文章

  1. spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)
  2. iOS网络编程之Socket
  3. WinUI 3 Preview 3 发布了,再一次试试它的性能
  4. Tomcat学习笔记(一)
  5. 源码:Hadoop-3.0.3 启动过程中执行start-all.sh开始
  6. java api 获取jvm实例_JVMTI那些事——和Java相互调用
  7. R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错
  8. Linux中mongodb定时远程备份
  9. ASP.Net七大内置对象 (整理的不错,转过来参考)
  10. PPT 字体的玩法(师从于珞珈老师)
  11. 【交换安全】DAI - Dynamic ARP Inspection 详解/arp欺骗/gratuitous arp
  12. 前台传递JSON数据,后台spring mvc如何接收数据
  13. 即使Windows DVD Maker不存在,如何在Windows 8上创建DVD-DVDStyler
  14. Image Segmentation Using Deep Learning: A Survery
  15. 宝塔面板FTP连接时“服务器发回了不可路由的地址。使用服务器地址代替。”
  16. KVM虚拟化产品-iVCS介绍
  17. java后台判断请求来自移动端访问还是PC端访问
  18. 服务器显示EE00,安装完成后,打开前台报错,后台显示不出验证码
  19. Airsim动态 | 安装ROS包装器(AirSim ROS Wrapper)
  20. 与波导分道扬镳后传音控股再谋借壳非洲之王欲在A股扬名

热门文章

  1. 今日头条星图平台正式面向头条作者全面开放
  2. Day2 Python基础学习——字符串、列表、元组、字典、集合
  3. 三维SLAM算法LeGO-LOAM源码阅读(三)
  4. Python列表排序-reverse()
  5. 2019真无线蓝牙耳机大推荐
  6. Long类型的相等判断
  7. 学习笔记-正则表达式-用正则匹配换行和空格的坑
  8. 从产品经理的角度思考内容平台(一)——开启时不宜过于专业
  9. 仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源代码)
  10. [ZT]Word设置“文档结构图”中文本的格式