Matplotlib:带有第二个 y 轴的 imshow

2023-11-24

我正在尝试使用 imshow() 在 matplotlib 中绘制二维数组,并在第二个 y 轴上用散点图覆盖它。

oneDim = np.array([0.5,1,2.5,3.7])
twoDim = np.random.rand(8,4)

plt.figure()
ax1 = plt.gca()

ax1.imshow(twoDim, cmap='Purples', interpolation='nearest')
ax1.set_xticks(np.arange(0,twoDim.shape[1],1))
ax1.set_yticks(np.arange(0,twoDim.shape[0],1))
ax1.set_yticklabels(np.arange(0,twoDim.shape[0],1))
ax1.grid()

#This is the line that causes problems
ax2 = ax1.twinx()

#That's not really part of the problem (it seems)
oneDimX = oneDim.shape[0]
oneDimY = 4
ax2.plot(np.arange(0,oneDimX,1),oneDim)
ax2.set_yticks(np.arange(0,oneDimY+1,1))
ax2.set_yticklabels(np.arange(0,oneDimY+1,1))

如果我只运行到最后一行的所有内容,我的数组就会完全可视化:

That's what it is supposed to look like!

但是,如果我添加第二个 y 轴 (ax2=ax1.twinx()) 作为散点图的准备,它会更改为这种不完整的渲染:

Incomplete visualisation of array

有什么问题?我在上面的代码中留下了几行描述散点图的添加,尽管它似乎不是问题的一部分。


在 Thomas Kuehn 指出的 GitHub 讨论之后,该问题已于几天前得到解决。在没有现成可用的构建的情况下,这里有一个修复方法,使用方面='自动'财产。为了获得漂亮的规则框,我使用数组尺寸调整了图形 x/y。轴自动缩放功能已用于删除一些额外的白色边框。

oneDim = np.array([0.5,1,2.5,3.7])
twoDim = np.random.rand(8,4)

plt.figure(figsize=(twoDim.shape[1]/2,twoDim.shape[0]/2))
ax1 = plt.gca()

ax1.imshow(twoDim, cmap='Purples', interpolation='nearest', aspect='auto')
ax1.set_xticks(np.arange(0,twoDim.shape[1],1))
ax1.set_yticks(np.arange(0,twoDim.shape[0],1))
ax1.set_yticklabels(np.arange(0,twoDim.shape[0],1))
ax1.grid()

ax2 = ax1.twinx()

#Required to remove some white border
ax1.autoscale(False)
ax2.autoscale(False)

Result:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matplotlib:带有第二个 y 轴的 imshow 的相关文章

  • 使用三个一维数组绘制等值线图

    正如标题所示 我想使用三个一维数组绘制等高线图 这么说吧 x np array 1 2 3 and y np array 1 2 3 and z np array 20 21 45 为了在 matplotlib 中绘制等高线图 我对x an
  • 将相同的 Patch 实例添加到 matplotlib 中的多个子图中

    我正在尝试将补丁的相同实例添加到 matplotlib 中的多个轴 这是最小的例子 import matplotlib pyplot as mpl plt import matplotlib patches as mpl patches f
  • 如何在Python中使用matplotlib更改日期格式[重复]

    这个问题在这里已经有答案了 可能的重复 使用 matplotlib 在轴标签中创建带有日期和时间的图表 https stackoverflow com questions 5498510 creating graph with date a
  • pcolormesh 的输入格式

    我正在尝试使用底图制作热量 强度图 我的输入是当时的一组纬度 经度和强度 数据集如下所示 lat 0 lon 0 intensity 0 lat 1 lon 1 intensity 1 lat n lon n intensity n 在每个
  • 如何在 PyQt5 GUI 中快速绘制 matplotlib 实时绘图

    几年前 我已经尝试过嵌入现场matplotlib中的情节PyQt5图形用户界面 实时绘图显示从传感器捕获的实时数据流 某些过程 我已经成功了 您可以在此处阅读相关帖子 您自己的 GUI 中的 Matplotlib 动画 https stac
  • 给定一般 3D 平面方程

    假设我有一个 3D 平面方程 ax by cz d 我如何在 python matplotlib 中绘制它 我看到一些例子使用plot surface 但它接受 x y z 值作为二维数组 我不明白如何将我的方程转换为参数输入plot su
  • 拟合泊松直方图

    I am trying to fit a curve over the histogram of a Poisson distribution that looks like this 我修改了拟合函数 使其类似于泊松分布 其中参数 t 作
  • 导入 matplotlib.pyplot 挂起

    我正在尝试在 OS X 10 8 4 上启动并运行 matplotlib 我已经安装了 matplotlib 和依赖项 libping freetype numpy scipy 我可以很好地导入 matplotlib 但是 如果我尝试导入
  • 如何在Python中绘制“Trace Explorer”?

    我需要重新创建一个情节 踪迹浏览器 https www bupar net trace explorer html与下面在 R 中创建的类似 我希望使用 matplotlib 但找不到任何有关如何执行这样的跟踪资源管理器的示例或参考 有人能
  • 如何为 matplotlib 中已绘制的线设置标签?

    在我的代码中我已经执行了 ax plot x y b 并且需要能够在事后设置相应行的标签 以达到与我相同的效果 ax plot x y b label lbl 有没有办法在 Matplotlib 中做到这一点 如果你抓住了line2D创建对
  • Matplotlib:以数据坐标中给定的宽度绘制线条

    我试图弄清楚如何绘制具有数据单位宽度的线条 例如 在下面的代码片段中 我希望宽度为 80 的线的水平部分始终从 y 40 延伸到 y 40 标记 并且即使坐标系的限制也保持这种状态改变 有没有办法用 matplotlib 中的 Line2D
  • Seaborn:带有边缘直方图的 kdeplot

    我正在使用一个kdeplot https seaborn pydata org generated seaborn kdeplot html绘制两个二元分布的密度 如下所示df c and df n有两个 Pandas DataFrame
  • 在 x 轴上操作日期 Pandas Matplotlib

    我有一组非常简单的数据 如下所示 我正在寻找一种方法来绘制此堆积条形图并格式化 x 轴 日期 使其从 1996 年 31 月 12 日开始 到 2016 年 31 月 12 日结束 增量为 365 天 我编写的代码绘制了每个日期 因此 x
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何将交互式 matplotlib 图形插入 tkinter 画布

    我正在尝试将交互式 matplotlib 图形 具有滑块 重置按钮和单选按钮的图形 放入 tkinter Canvas 中 我已成功添加非交互式图表 但当它变为交互式时找不到问题 我尝试将所有内容更改为使用 matplotlib Figur
  • Python极坐标图:绘制与角度对应的值

    我正在尝试绘制以不同角度记录的传感器数据 import pandas as pd import matplotlib pyplot as plt create dataframe each row contains an angle and
  • ipython/ pylab/ matplotlib安装和初始化错误

    我在 OS X El Captain 上安装了 matplotlib anaconda ipython 然而 即使在尝试以所有可能的方式设置环境变量之后 我仍无法启动 ipython shell pylab 版本 这是错误 ImportEr
  • 在 MatPlotLib 中检索自定义破折号

    关于如何使用 matplotlib 线中设置自定义破折号有很多问题Line2D set linestyle and Line2D set dashes 但是 我似乎找不到在设置后检索破折号图案的方法 这是在主站点上设置破折号的示例 我将在下

随机推荐