如何使用 Python和Matplotlib设置一个子图的视觉宽度等于另一个子图的宽度?第一幅图具有固定的纵横比和来自imshow的正方形像素.然后我想把一个线条放在下面,但是不能这样做,并且使所有的对齐.

我相当肯定该解决方案涉及这个Transform Tutorial页面上的信息.我已经尝试使用fig.transfigure,ax.transAxes,ax.transData等,但还没有成功.我需要找到上面的轴的宽度和高度和偏移量,然后可以设置下面的轴的宽度,高度和偏移量.不应包括轴标签和刻度等,或更改对齐方式.

例如,以下代码

fig = plt.figure(1)
fig.clf()

data = np.random.random((3,3))
xaxis = np.arange(0,3)
yaxis = np.arange(0,3)

ax = fig.add_subplot(211)
ax.imshow(data,interpolation='none')
c = ax.contour(xaxis,yaxis,data,colors='k')

ax2 = fig.add_subplot(212)

解决方法

matplotlib轴的轮廓由三件事情控制:

>图中的轴的边界框(由子图规范或特定范围(如fig.add_axes([left,bottom,width,height])控制).轴限制(不计算刻度标签)将始终在此框.
>通过更改数据限制或轴“Box”的形状来控制是否允许限制或高宽比更改的可调整参数.这可以是“datalim”,“Box”或“Box-forced”. (后者用于共享轴.)
轴的极限和纵横比.对于具有固定宽高比的曲线图,轴框或数据限制(取决于可调整)将被更改,以保持指定的纵横比.纵横比是指数据坐标,而不是轴的形状.

对于最简单的情况:

import numpy as np
import matplotlib.pyplot as plt

fig,axes = plt.subplots(nrows=2)

data = np.random.random((3,3)

axes[0].imshow(data,interpolation='none')
c = axes[0].contour(xaxis,colors='k')

axes[1].set_aspect(1)

plt.show()

共享轴

但是,如果您希望确保它保持不变的形状,并且您可以使用具有相同数据限制的两个图形,您可以执行以下操作:

import numpy as np
import matplotlib.pyplot as plt

fig,axes = plt.subplots(nrows=2),sharex=True,sharey=True)
plt.setp(axes.flat,adjustable='Box-forced')

data = np.random.random((5,5)

axes[0].imshow(data,colors='k')

axes[1].plot([-0.5,2.5],[-0.5,4.5])
axes[1].set_aspect(1)

plt.show()

但是,您可能会注意到这看起来不对.这是因为第二个子图由于我们绘制的顺序控制了第一个子图的范围.

基本上,使用共享轴,无论我们上面绘制的是什么,都可以控制初始范围,所以如果我们只是交换我们绘制的顺序:

import numpy as np
    import matplotlib.pyplot as plt

    fig,axes = plt.subplots(nrows=2,sharey=True)
    plt.setp(axes.flat,adjustable='Box-forced')

    data = np.random.random((5,3))
    xaxis = np.arange(0,3)
    yaxis = np.arange(0,5)

    axes[1].plot([-0.5,4.5])
    axes[1].set_aspect(1)

    axes[0].imshow(data,interpolation='none')
    c = axes[0].contour(xaxis,colors='k')

    plt.show()

当然,如果您不关心正在链接的绘图的交互式缩放/平移,则可以完全跳过共享轴,只需:

import numpy as np
import matplotlib.pyplot as plt

fig,axes = plt.subplots(nrows=2)

data = np.random.random((5,4.5])

# copy extents and aspect from the first axes...
axes[1].set_aspect(axes[0].get_aspect())
axes[1].axis(axes[0].axis())

plt.show()

非共享轴

如果您不希望两个轴具有相同的数据范围,可以强制它们具有相同的大小(尽管如果您进行了交互式缩放,它们将不会被链接).为此,您需要计算第二个图形的宽高比应基于其第一个图的范围和范围/方面.

import numpy as np
import matplotlib.pyplot as plt

fig,colors='k')

axes[1].plot(np.linspace(0,10,100),np.random.normal(0,1,100).cumsum())

# Calculate the proper aspect for the second axes
aspect0 = axes[0].get_aspect()
if aspect0 == 'equal':
    aspect0 = 1.0
dy = np.abs(np.diff(axes[1].get_ylim()))
dx = np.abs(np.diff(axes[1].get_xlim()))

aspect = aspect0 / (float(dy) / dx)
axes[1].set_aspect(aspect)

plt.show()

Python Matplotlib线图与轮廓/ imshow对齐的更多相关文章

  1. canvas中普通动效与粒子动效的实现代码示例

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。本文详细的介绍了粒子特效,和普通动效进行对比,非常具有实用价值,需要的朋友可以参考下

  2. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. canvas学习和滤镜实现代码

    这篇文章主要介绍了canvas学习和滤镜实现代码,利用 canvas,前端人员可以很轻松地、进行图像处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. localStorage的过期时间设置的方法详解

    这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. 详解HTML5 data-* 自定义属性

    这篇文章主要介绍了详解HTML5 data-* 自定义属性的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. HTML5的postMessage的使用手册

    HTML5提出了一个新的用来跨域传值的方法,即postMessage,这篇文章主要介绍了HTML5的postMessage的使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. ios – Swift语言:如何调用SecRandomCopyBytes

    从Objective-C,我可以这样做:在Swift中尝试这个时,我有以下内容:但我得到这个编译器错误:data.mutableBytes参数被拒绝,因为类型不匹配,但我无法弄清楚如何强制参数.解决方法这似乎有效:

  9. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

  10. ios – NSData to Data swift 3

    如何将此代码转换为使用Swift3数据?

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部