网易首页 > 网易号 > 正文 申请入驻

精心总结了10个matplotlib绘图技巧,短小精悍,威力无穷!

0
分享至

  作者 | 刘早起 责编 | 欧阳姝黎

  大家好,我是早起。

  在使用 Python 进行数据可视化时,相信不论是什么工具,你都会发现有些操作/代码段会频繁的用到,这一点在matplotlib上尤为突出。

  本文就向大家分享十个我常用的一些小技巧,大多一行代码,短小精悍,威力无穷。

  
快速且正确的显示中文

  在matplotlib中,默认是没法显示中文的,原因很简单,默认使用的字体文件中不含中文。

  当你搜索如何设置中文时,会有很多教程,我曾经也详细的介绍过3种方法,但是在有的电脑上折腾很久也搞不定,所以当你浪费了太多时间也没法解决,或者在一台陌生的设备上使用,需要快速的让matplotlib显示中文可以使用下面的代码。

  import matplotlib as mpl

  WRYH = mpl.font_manager.FontProperties(
fname='/Users/liuzaoqi/Desktop/可视化图鉴/font/WeiRuanYaHei-1.ttf')
# 微软雅黑字体

  plt.title('可视化图鉴', fontproperties=WRYH)

  很简单,既然修改默认的字体搞不定,那么就准备一个中文字体的路径,并在每次需要显示中文的组件(标题、注释、图例等)时,就强制指定使用这个字体。

  这个办法一定可以让你图中的中文快速且正确显示出来,但是如果涉及中文的地方过多,还是需要在以后尝试一劳永逸的将中文字体添加到默认字体集中。

  
提高分辨率

  如果感觉默认生成的图形分辨率不够高,可以尝试修改 dpi 来提高分辨率,在matplotlib中可以一次性通过plt.rcParams修改,也可以在创建画布时为这一次的绘制修改,例如将分辨率调整至100

  plt.figure(figsize = (7,6),dpi =100)

  如果你的设备是配备Retina屏幕的mac,可以在jupyter notebook中,使用下面一行代码有效提高图像画质

  %config InlineBackend.figure_format = 'retina'

  
添加数学公式

  有时我们在绘图时需要添加带有数学符号、公式的文字,如果直接使用默认的方法添加,虽然可以实现,但是不够美观,其实在matplotlib中也支持输出数学公式,就像下面的文字注释一样

  只用在需要出现公式的位置使用r'你的公式'即可,比如plt.text(11000,0.45,r'拟合的曲线为$f(x) = 1.3x^2-6.54x+0.5$')注意$$中是latex格式的表达方式,如果不熟悉的话需要自行搜索。

  当然,也可以使用plt.rcParams['text.usetex'] = True设置默认tex输出,异曲同工,此处不多介绍。

  
一行代码提高颜值

  有时我们会觉得matplotlib默认制作出来的图片太朴素了,不够高级,其实开发者也内置了几十种主题让我们自己选择,只要使用plt.style.use('主题名')指定主题即可,具体的支持主题我也整理出来的在 《 一行代码提高颜值,给你的matplotlib换个样式! 》这篇文章中。

  例如使用R语言中经典的ggplot主题

  plt.style.use('ggplot')

  另外一种提高图形颜值的代码是借用seaborn调色板修改配色,也是一行代码,通过sns.set_palette(xxxx)就能直接调整全局配色方案,下面是我比较喜欢的一种配色

  import seaborn as sns
sns.set_palette("pastel", 8)

  
调整图例位置

  虽然matplotlib在生成图例时,默认会选择一个最合适的位置,但是有时依旧不能让人满意。

  相信你知道我们可以使用loc = xxxx自己设置图例位置,但是对于xxxx每次都要查,看文字说明左上右下不如一张图来的快,下面是我们可以选择的9个位置,可以根据自己的需要进行选择。

  
获得当前绘图区域

  在原理篇文章中,我曾经说到如果想要获得更精细的调整,就需要使用ax.xxxx进行调整,但有时我们开始没有使用fig,ax=plt.subplots(figsize = (6,4),dpi=100)来定义ax,在需要使用时重新开始并定义是不推荐的,这时可以使用

  ax = plt.gca()

  获得当前Figure中的Axes,并继续正常使用ax.xxxx调整

  
隐藏坐标轴

  对于有些图形我们希望通过隐藏坐标轴来显得更加美观,这时可以ax.spines获取对应位置的的Spine对象,之后便可以任意修改是否显示与显示颜色,比如让右边和上面的线消失或者修改颜色

  ax.spines['right'].set_color('None')
ax.spines['top'].set_color('None')

ax.spines['right'].set_color('deeppink')
ax.spines['top'].set_color('blue')
ax.spines['bottom'].set_color('green')
ax.spines['left'].set_color('red')

  
指定坐标轴刻度

  如果对于默认生成的坐标轴刻度不满意,我们可以使用plt.yticks([])来自定义刻度,注意需要传入一个你想要的刻度list,并且长度需要和刻度对应,例如下方代码

  label = ['2月7日','3月25日','5月13日','7月2日','8月21日','10月10日','11月29日','12月31日']

  plt.yticks(range(0,400,50), labels=label,rotation = 40,color = 'black')

  当然如果label是空的话,可以结合上一个技巧把对应的坐标轴干掉,彻底消失

  plt.yticks([])

  
添加自定义图片

  有时我们希望在对数据可视化后添加一些图片来丰富元素,虽然可以使用ps添加,但其实matplotlib也可以独立完成,总共分两步:打开图片——添加图片

  首先导入相关的包并根据图片路径导入

  from matplotlib.offsetbox import (OffsetImage,AnnotationBbox)
import matplotlib.image as mpimg
arr_img = mpimg.imread('你的图片位置')

  接着就可以根据坐标将图片添加到指定位置,详细的设置可以参考官方文档,下面的代码可以拿走就用,根据效果调整坐标即可

  imagebox = OffsetImage(arr_img, zoom=0.2)
ab = AnnotationBbox(imagebox, [0.15,0.5],
xybox=(170., -50.),
xycoords='data',
boxcoords="offset points",
pad=0.5
ax.add_artist(ab)

  
添加表格

  有时只用图片很难传递更多的信息,幸运的是,在matplotlib中也可以使用plt.table来为图片添加一张与之对应的表格,只需要将你的数据按照指定格式传入即可。

  下面是我在官方文档示例的基础上,添加渐变效果的表格

  data = [[ 66386, 174296, 75131, 577908, 32015],
[ 58230, 381139, 78045, 99308, 160454],
[ 89135, 80552, 152558, 497981, 603535],
[ 78415, 81858, 150656, 193263, 69638],
[139361, 331509, 343164, 781380, 52269]]

  columns = ('Freeze', 'Wind', 'Flood', 'Quake', 'Hail')
rows = ['%d year' % x for x in (100, 50, 20, 10, 5)]
values = np.arange(0, 2500, 500)
value_increment = 1000
colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows)))
n_rows = len(data)

  index = np.arange(len(columns)) + 0.3
bar_width = 0.4

  plt.figure(figsize = (8,5),dpi =100)
y_offset = np.zeros(len(columns))
cell_text = []
for row in range(n_rows):
plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
y_offset = y_offset + data[row]
cell_text.append(['%1.1f' % (x / 1000.0) for x in y_offset])
colors = colors[::-1]
cell_text.reverse()

  the_table = plt.table(cellText=cell_text,
rowLabels=rows,
rowColours=colors,
colLabels=columns,
loc='bottom'
,cellColours=plt.cm.Blues(x))

  plt.subplots_adjust(left=0.2, bottom=0.2)

  plt.ylabel("Loss in ${0}'s".format(value_increment))
plt.yticks(values * value_increment, ['%d' % val for val in values])
plt.xticks([])
plt.title('Loss by Disaster')

  plt.show()

  以上就是本文和大家总结的10个matplotlib小技巧,在未来的文章中我会继续分享相关知识,也希望大家可以在使用一些数据可视化工具时可以不断总结,不断进步。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
一路走好!离春节仅剩1周,5位名人接连去世,最小20岁,令人唏嘘

一路走好!离春节仅剩1周,5位名人接连去世,最小20岁,令人唏嘘

青橘罐头
2026-02-11 10:36:15
理想汽车CEO李想兑现邀约:奔赴浙江海盐,请救人车主吃饭

理想汽车CEO李想兑现邀约:奔赴浙江海盐,请救人车主吃饭

识礁Farsight
2026-02-12 14:18:59
这是干嘛呀?哎哟哟一点不害羞!

这是干嘛呀?哎哟哟一点不害羞!

太急张三疯
2026-02-12 09:53:21
恐怖20连胜!曼城缔造神迹,瓜帅狂赞塞梅尼奥:难以置信的引援

恐怖20连胜!曼城缔造神迹,瓜帅狂赞塞梅尼奥:难以置信的引援

听我说球
2026-02-12 08:58:59
内蒙古一200斤男子欠5000万不还,被债主装进铁笼沉入80米水库,谁料,2年后才被捞出...

内蒙古一200斤男子欠5000万不还,被债主装进铁笼沉入80米水库,谁料,2年后才被捞出...

品读时刻
2026-02-11 17:18:30
广州长隆发生坠落事故

广州长隆发生坠落事故

东莞好生活
2026-02-11 17:17:17
10天明朗:随着印度日本等事态发展,川普打伊朗的可能性越来越大

10天明朗:随着印度日本等事态发展,川普打伊朗的可能性越来越大

邵旭峰域
2026-02-11 11:23:32
近168万手封涨停,600589!暴涨超24%,液冷龙头业绩大超预期(附名单)

近168万手封涨停,600589!暴涨超24%,液冷龙头业绩大超预期(附名单)

数据宝
2026-02-12 12:13:12
冬奥会爆出巨大丑闻!韩国2名运动员作弊被发现,比赛成绩遭取消

冬奥会爆出巨大丑闻!韩国2名运动员作弊被发现,比赛成绩遭取消

侃球熊弟
2026-02-11 18:10:28
广东一女子外出找工作后失联!众人搜寻6小时,在狭小石洞中发现她…

广东一女子外出找工作后失联!众人搜寻6小时,在狭小石洞中发现她…

广东活动
2026-02-12 01:13:00
湖北女孩远嫁法国,想把农村母亲接到法国,洋女婿:我们房子太小

湖北女孩远嫁法国,想把农村母亲接到法国,洋女婿:我们房子太小

谈史论天地
2026-02-10 16:40:10
今晚赛事:2月12日晚21点39,中央电视台CCTV5、CCTV5+直播节目表

今晚赛事:2月12日晚21点39,中央电视台CCTV5、CCTV5+直播节目表

皮皮观天下
2026-02-12 12:50:12
410次开房记录流出:央企“女老虎”陶荔芳,背后还有多少同伙

410次开房记录流出:央企“女老虎”陶荔芳,背后还有多少同伙

深度报
2025-12-14 22:36:54
章泽天在国外的学校开放日被拍,这是怎么了,不太高兴啊

章泽天在国外的学校开放日被拍,这是怎么了,不太高兴啊

可乐谈情感
2026-02-12 09:08:02
人民币在朝鲜的购买力,到底有多强?一位中国游客的震撼之旅

人民币在朝鲜的购买力,到底有多强?一位中国游客的震撼之旅

番外行
2026-02-11 14:19:41
中日韩最大财团对比:三星3.2万亿,三菱21万亿,中国第一是谁?

中日韩最大财团对比:三星3.2万亿,三菱21万亿,中国第一是谁?

阿器谈史
2026-01-30 08:40:58
3-0!英超争冠一夜生变:曼城大胜+差榜首3分,阿森纳头大了

3-0!英超争冠一夜生变:曼城大胜+差榜首3分,阿森纳头大了

体育知多少
2026-02-12 06:20:15
骑士五连胜,赛后球员评分,一人满分,登球组合高分,1人不及格

骑士五连胜,赛后球员评分,一人满分,登球组合高分,1人不及格

邹维体育
2026-02-12 10:40:49
长征十号子级回收时落在了回收网200米外,为何没落到回收网中?

长征十号子级回收时落在了回收网200米外,为何没落到回收网中?

科普大世界
2026-02-11 14:45:51
外国人疯了?机票爆抢,集体喊着:我要当中国人,到中国过年!

外国人疯了?机票爆抢,集体喊着:我要当中国人,到中国过年!

忠于法纪
2026-02-11 15:37:18
2026-02-12 14:44:49
CSDN incentive-icons
CSDN
成就一亿技术人
26319文章数 242230关注度
往期回顾 全部

科技要闻

xAI高层大地震!马斯克紧急重组,反手画饼

头条要闻

王莉霞被"双开":曾是"救火队长" 不到49岁就任副省长

头条要闻

王莉霞被"双开":曾是"救火队长" 不到49岁就任副省长

体育要闻

31岁首次参加冬奥,10年前她是个水管工

娱乐要闻

体操运动员坠楼涉事教练被立案调查

财经要闻

中国乳业2025年回顾:行业寒潮压顶

汽车要闻

宝马全球大召回 起火隐患涉及多款热门车型

态度原创

时尚
本地
数码
手机
军事航空

这些才是适合普通人的冬天穿搭!不露腿、不露腰,得体又大方

本地新闻

下一站是嘉禾望岗,请各位乘客做好哭泣准备

数码要闻

Mercury报告2025Q4全球CPU市场:AMD出货量/额均创历史新高

手机要闻

消息称内存涨价冲击手机行业:主流厂商下调出货量,仅一家逆势上调目标7000万

军事要闻

特朗普:若美伊谈判失败 或再派一支航母打击群

无障碍浏览 进入关怀版