Matplotlib优雅作图笔记
极市平台
共 7801字,需浏览 16分钟
· 2020-08-12
加入极市专业CV交流群,与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~
高效性:永远永远面向对象
创建figure实例; 在figure上创建axes; 在axes上添加基础类对象。
创建figure对象和axes对象; 为每个容器类元素添加基础类元素。
先找对象; 再解决问题。
二、高效作图第一步:创建容器类对象
# 优雅地创建图和坐标系
layout = (3, 2) # 坐标系的布局
fig, axes = plt.subplots(*layout) # 添加图和坐标系
# 坐标系索引的两种方式
# 1. 矩阵索引
ax1 = axes[0][0] #第一个坐标系
ax2 = axes[0][1] #第二个坐标系
# 2. 遍历
for ax in axes.flat:
pass
三、高效作图第二步:添加基础类对象
# 图
fig.legend() # 图-图例
# 坐标系
ax.plot() # 坐标系-线
ax.scatter() # 坐标系-点
ax.grid() #坐标系-网格
ax.legend() # 坐标系-图例
ax.text() # 坐标系-文字
ax.set_title('Title') # 坐标系-标题
# 坐标轴
ax.set_xlabel('xlabel') # 坐标系-坐标轴-标签
# 刻度
ax.set_xticklabels(['one', 'two', 'three', 'four', 'five']) # 坐标系-坐标轴-刻度-标签
ax.
就太不优雅了,这时候可以使用ax.set()
来统一设置,简化代码:# 优雅地添加基础类对象
props = {'title': 'Title', # 坐标系-标题
'xlabel': 'xlabel', # 坐标系-坐标轴-标签
'xticklabels':xticklabels_list} # 坐标系-坐标轴-刻度-标签
ax.set(**props)
四、我是例子
# 高效作图第一步:创建figure和axes
fig, ax = plt.subplots() # 添加图和坐标系
# 高效作图第二步:添加基础类对象
ax.plot(df.index, df['MC_Price']) # 坐标系-线
ax.plot(df.index, df['DT_Price']) # 坐标系-线
ax.plot(df.index, df['TT_Price']) # 坐标系-线
ax.plot(df.index, df['WT_Price']) # 坐标系-线
props = {'title': 'Title', #坐标系-标题
'xlabel': 'xlabel', # 坐标系-坐标轴-标签
'ylabel':'ylabel'} # 坐标系-坐标轴-标签
ax.set(**props)
美观性:先全局,后局部
一、美观作图第一步:全局美化格式
plt.style.use()
使用官方预定义的样式,二是通过mpl.rcParams
自定义样式。plt.style.available
可以查看所有可用样式,时间紧迫时可以用这种方法。mpl.rcParams.keys()
可以查看所有可以全局定义的属性,用mpl.rcParams.update()
可以实现一行代码更新参数。params = {
"font.size": 12, # 全局字号
'font.family':'STIXGeneral', # 全局字体
"figure.subplot.wspace":0.2, # 图-子图-宽度百分比
"figure.subplot.hspace":0.4, # 图-子图-高度百分比
"axes.spines.right":False, # 坐标系-右侧线
"axes.spines.top":False, # 坐标系-上侧线
"axes.titlesize":12, # 坐标系-标题-字号
"axes.labelsize": 12, # 坐标系-标签-字号
"legend.fontsize": 12, # 图例-字号
"xtick.labelsize": 10, # 刻度-标签-字号
"ytick.labelsize": 10, # 刻度-标签-字号
"xtick.direction":'in', # 刻度-方向
"ytick.direction":'in' # 刻度-方向
}
style_dict = {
'MC_Price':dict(linestyle=':', marker='o',markersize=6,color='#fdae61'),
'WT_Price':dict(linestyle='-',marker='*',markersize=6,color='#d7191c'),
'DT_Price':dict(linestyle='--',marker='s',markersize=6,color='#abdda4'),
'TT_Price':dict(linestyle='-.',marker='v',markersize=6,color='#2b83ba')
}
ax.plot(x,y,**style_dict[key])
matplotlibrc
文件,我就不再展开了,因为我也不会。二、美观作图第二步:局部美化格式
fig.subplots_adjust(left=0.09, bottom=0.1, right=0.99, top=0.99, wspace=0.1) # 调整子图的位置和间距
ax.set_xlim(min_value, max_value) # 调整坐标轴范围
ax.legend(loc='upper right') #调整图例位置
ax.grid(linestyle="--", alpha=0.2) # 调整网格的线型和透明度
三、我也是例子
# 优雅地创建Figure和Axes
fig, ax = plt.subplots()
# 优雅地添加基础类对象
ax.plot(df.index, df['MC_Price'], **style_dict['MC_Price'])
ax.plot(df.index, df['DT_Price'], **style_dict['DT_Price'])
ax.plot(df.index, df['TT_Price'], **style_dict['TT_Price'])
ax.plot(df.index, df['WT_Price'], **style_dict['WT_Price'])
props = {'xlabel': 'xlabel', # 坐标轴-标签
'ylabel':'ylabel'} # 坐标轴-标签
ax.set(**props)
# 优雅地局部美化格式
fig.legend(('MC','DT','TT','WT'),frameon=False, loc='upper center',ncol=4,handlelength=4) # 图例
ax.fill_between(df.index, df['MC_up'], df['MC_down'], alpha=0.15, linewidth=0, color='#fdae61') # 阴影
ax.grid(linestyle="--", alpha=0.2) # 网格线
交互性:无缝融合LaTex
\showthe\textwidth
命令来获得最终需要的图片的宽度:\documentclass{article}
\begin{document}
\showthe\textwidth
\end{document}
.log
文件中就可以找到这样的字眼:> 443.86319pt.
l.204 \showthe\textwidth
atplotlib-Latex
这篇文章给出的解决方案:先进行单位换算,再用黄金比例0.618来确定图片的高度。fig_width_pt = 443.86319pt
inches_per_pt = 1 / 72.27
golden_ratio = (5**.5 - 1) / 2
fig_width_in = fig_width_pt * inches_per_pt
fig_height_in = fig_width_in * golden_ratio
交互作图第二步:按格式导出图片
.svg
或者.pdf
为后缀的,这类图片放大时不会失真。一般而言,SVG格式用于Word,PDF格式用于LaTeX。bbox_inches='tight'
参数。导出图片的代码如下:fig.savefig('example.pdf', format='pdf', bbox_inches='tight')
\begin{figure}
\centering
\includegraphics{example.pdf}
\end{figure}
总结
5、https://mp.weixin.qq.com/s/QXRXlejzKWox_rvLa66joA
评论
多人同时导出 Excel 干崩服务器!新来的阿里大佬给出的解决方案太优雅了!
点击关注公众号,Java 干货及时推送↓推荐阅读:面试辅导,我们出大成果了!来源:juejin.cn/post/7259249904777838629前言 业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,
Java技术栈
1
原来Matplotlib能画股票K线图!!附代码
之前在一篇文章中提到Matplotlib可视化,甚至可以用来画股票K线图,许多同学也在问代码,这次来发个文回应下。Python用matplotlib绘制K线图,需要配合talib、numpy、mpl_finance等第三方库来使用,效果展示如下:简单讲讲K线图的结构,我不搞股票,所以不太懂,特地查了
Python大数据分析
9
Spring Boot 优雅实现多租户架构
来源:blog.csdn.net/u010349629/article/details/130737253👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0
小哈学Java
10
华为发布会:智界S7重新发布 笔记本主打轻薄
大数据文摘受权转载自头部科技文丨海天华为鸿蒙生态春季沟通会于4月11日召开,华为常务董事、消费者BG CEO、华为智能汽车解决方案BU董事长余承东带来两款产品,一款是华为与奇瑞合作打造的智界S7,号称高能大空间智慧轿车;一款是华为MateBook X Pro笔记本,它只有980克,却搭载Ultra
大数据文摘
0
C# 优雅的处理 TCP 数据
前言Tcp是一个面向连接的流数据传输协议,用人话说就是传输是一个已经建立好连接的管道,数据都在管道里像流水一样流淌到对端。那么数据必然存在几个问题,比如数据如何持续的读取,数据包的边界等。Nagle's算法Nagle 算法的核心思想是,在一个 TCP 连接上,最多只能有一个未被确认的小数据包(小于
dotNET全栈开发
10
阿里内部 “Vue+React” 实战笔记,正式开源了!
上周找 阿里P8级前端大佬 要来了几套高质量内部资料。既是高频真题,也是一套前端进阶学习宝典。几乎满足各级前端工程师的需求,内容涵盖了Html、Css、Javascript、vue、React、小程序、算法等等。实战代码清晰,解析也十分全面。足足有15套!据说有不少朋友靠这套资料
程序员成长指北
10
收藏 | 论文画图工具:25个常用Matplotlib图的Python代码总结
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达仅作学术分享,不代表本公众号立场,侵权联系删除转载于:作者丨zsx_yiyiyi来源丨python大本营编辑丨极市平台# !pip install brewer2mplimport nump
小白学视觉
10
MTK MFNR 学习笔记
和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、MFNR 简介二、MFNR 开关与决策三、MFNR 相关的adb 命令四、MFNR log 分析五 参考文献一、MFNR 简介MFNR : Multiple Frame Noise ReductionMF
程序员Android
10