最近接手一个问题,要将一幅热力图和一个折线图画在同一幅图内,且要保证两幅图的尺寸一致,保证对齐,另外还要求纵轴的label位置也对齐,效果如下:

由于两种图像是以不同的格式读取的,上面是三通道rgb图,下面是plt绘制的折线图,用subplot画出来尺寸会不一样。可以理解为上面的图的尺寸是固定的,但下面的图的尺寸是可伸缩的。

一时间没想到太好的处理方式,于是看到了一篇博文http://www.pythonheidong.com/blog/article/141424/里提到用matplotlib.gridspec来把画布划分成等尺寸的小格子的方法来实现,基本上能满足我的需求。

大致的思路就是把画布四等分为2x2的网格(为什么不用两行一列的网格我后面会说),两幅图分别占用同一列的两个网格即可。除此之外,由于纵轴的label距坐标轴的距离会随着纵轴刻度的长度变动,下图的纵轴数字较长(1000),上图的较短(100),会导致如下图的不对齐的情况

为了解决这种情况,我也搜了很多方案,最后还是认为用最原始的方法比较合适:隐藏自带的label,自己打一个text文本上去肉眼移动距离。。。虽然这个方法很不精确,但是对于图例展示来说足够用了

实现的代码如下:

import numpy as np
import os
import matplotlib.pyplot as plt
import matplotlib.gridspec as grd
from matplotlib.pyplot import MultipleLocator'''读取数据'''
path = r"F:\我的坚果云\数据展示"
htmp1 = np.load(os.path.join(path,"318-loc.npy")) #读取热力图
#由于之前是用cv2存的图像,rgb通道和plt保存的顺序不一样,所以要倒一倒
htmp2 = []
for x in htmp1:yy = []for y in x:yy.append([y[2], y[1], y[0]])htmp2.append(yy)
htmp2 = np.array(htmp2) #再存为ndarray格式cord = np.load(os.path.join(path, "318.npy")) #读取折线图数据'''开始绘图'''
fig = plt.figure()
gs = grd.GridSpec(nrows=2,ncols=2, width_ratios=[1,1], hspace=0.2) #把fig划分成2x2网格,网格宽度比为1:1#画热力图
ax = plt.subplot(gs[0]) #往左上网格填元素
p = ax.imshow(htmp2, interpolation='nearest')
xlabel = ['$0.0$', '$0.5$','$1.0$', '$1.5$', '$2.0$']
plt.xticks(np.arange(0, 201, 50), xlabel)
hpy = int(htmp2.shape[0]/2)
plt.text(-54.5,hpy,"Channel",rotation=90,verticalalignment="center", horizontalalignment="center") #这里text的横坐标是我目测出来的,纵坐标取整个坐标的中点#画折线图
ax2 = plt.subplot(gs[2]) #设置左下网格画波形
ax2.plot(np.linspace(0,2,200),cord*1000000,'k',lw=0.5) #波形数据
plt.ylim(top=1000) #设置y轴刻度最大值
plt.xlabel("Time(s)")
plt.text(-0.7,0,"Voltage(uV)",rotation=90,verticalalignment="center", horizontalalignment="center") #这里的纵坐标直接对应纵坐标为0的位置
plt.savefig("318.eps", format="eps", dpi=600) #保存成矢量图

之所以没有使用两行一列的网格,是因为测试下来还是会不对齐。同理修改网格的宽度比(width_ratios)也会导致不对齐,具体为什么我也不是很清楚。。。另外,生成的图片会有一半留白,这块空白是另一列空白的网格占的位置,介意的话可以把图片重新载入再只保存一半的图片(也就是只保存矩阵一半的数据),或者像我一样保存成eps后用Adobe Illustrator后期一下。。。这样的图片质量还很高

如果有更好的解决方式希望你能留言,谢谢!!!

Matplotlib将image和图表的尺寸对齐相关推荐

  1. WordPress 设置图片的默认显示方式(尺寸/对齐方式/链接到)

    在文章中插入图片时,我们几乎每次都要设置图片的尺寸.对齐方式和链接方式,是比较耗时费力的.其实我们可以给这几个选项设置默认参数,省去我们每次设置的麻烦. 可以将下面的代码添加到主题的 function ...

  2. Origin 2017调整画布和图表的尺寸大小

    在毕业设计论文中我们需要绘制一些图表来做辅助说明,而且指导老师要求图表的尺寸为8*6cm,即横向8cm,纵向6cm,所以在使用Origin制作图表时我需要调整画布和图表的大小,下面我以Origin 2 ...

  3. Python数据可视化matplotlib(一)—— 图表的基本元素

    Python数据可视化matplotlib(一)-- 图表的基本元素 图表创建 plt.show() # 图表窗口1 → plt.show()plt.plot(np.random.rand(10)) ...

  4. 使用python库matplotlib绘制不同的图表

    如题,使用python中的matplotlib绘制图表,主要分享绘制简单的曲线图.单条曲线图.多条曲线图.直方图以及散点图的思路和用法. 1.绘制简单曲线图 思路:通过3个坐标点,绘制曲线 impor ...

  5. python直方图与x轴对应不起来_Python Matplotlib绘图与x轴标签正确对齐并匹配系列和错误的颜色...

    我希望使用Matplotlib从Pandas Dataframes绘制一些数据 . 我需要控制情节的各种属性 . 我有2个属性有困难: 一个 . 自定义x轴标签的正确间距b . 如何使用相同的颜色绘制 ...

  6. python使用matplotlib库构建动态图表 --基于animation模块

    前言 熟悉python数据分析的朋友一定对matplotlib库不陌生,这是做数据可视化最常用的包之一.虽然我们经常使用mattplotlib做一些静态的图表,比如折线图,柱状图,饼图等等,但是某些时 ...

  7. vue中根据窗口的大小调整echarts图表的尺寸

    示例: html: <template><div class="container"><div id="myChart" styl ...

  8. python动态图表变化_用 Matplotlib 库生成动画图表

    更多文章请关注微信公众号:硬核智能 动画是一种展示现象的有趣方式.相对于静态图表,人类总是容易被动画和交互式图表所吸引.在描述多年来的股票价格.过去十年的气候变化.季节性和趋势等时间序列数据时,动画更 ...

  9. 使用jupyter中的matplotlib库绘制简单图表4

    一.设置图表样式与映射表 (1)使用rc()函数修改图表样式 (2)设置颜色映射表可以使用关键字cmap或者直接调用set_cmap()函数进行设置 1.代码 import numpy as np i ...

最新文章

  1. R语言ggplot2可视化配置图例(legend)标签色彩的升序或者反序(reverse)实战:ggplot2可视化默认图例标签色彩(升序,颜色越来越深)、可视化配置图例标签颜色反序(颜色越来越浅)
  2. Mysql数据库表内外键关联的问题
  3. 细数网络上十七种安全威胁
  4. this.counter$ = store.select(fromExample.getCounterCounter)之后马上subscribe
  5. 双曲线和直线联立公式_圆锥曲线联解公式
  6. hdu 1028 Ignatius and the Princess III 母函数入门
  7. 【机器学习】监督学习--(分类)非线性逻辑回归
  8. C++超详细STL常用算法总结
  9. VUE引入ntko office在线编辑器
  10. SQL Server 日期函数
  11. yuki翻译器钩子_YUKI游戏翻译工具下载 YUKI GALGAME翻译器v0.14 最新版
  12. SQL常用脚本大全,建议收藏!
  13. 控制器同变频器建立modbus RTU通信小结
  14. 如何处理pagefile.sys占用太多C盘空间
  15. 第五节 结构化分析模型
  16. C语言-数据结构-栈(静态栈与动态栈)
  17. 仿瑞吉外卖 【手机登陆功能换成邮件登陆】
  18. 背包问题变种:将数组分成两部分使得两部分的和的差最小
  19. 电脑PHP动画制作画板,html5教程制作简单画板代码分享
  20. Centos7安装网易云播放器

热门文章

  1. 横河川仪压力变送器故障代码_压力变送器常见故障分析
  2. DirectX9.0 入门手册(6)
  3. thinkcmf 渗透测试漏洞修复解决方案
  4. 【李宏毅深度学习CP11】Self-attention(part2)
  5. 数码产品常见防水等级:IPX4、IP68等防水等级的作用
  6. 《Android 开发工程师面试指南》
  7. 算法分析与设计——田忌赛马
  8. fanuc机器人应用
  9. 华为5G LampSite系列产品有何亮点?
  10. excel单元格删除空格_在Excel数据输入单元格中防止空格