【问题标题】:Adding image to a plot -matplotlib PYTHON将图像添加到绘图 -matplotlib PYTHON
【发布时间】:2014-02-28 21:37:46
【问题描述】:

我正在尝试在绘图的右侧插入一个 .png 图像,并遵循此处提到的代码: Combine picture and plot with Python Matplotlib

这是我尝试过的:

import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.cbook as cbook
from matplotlib._png import read_png
from matplotlib.offsetbox import OffsetImage 
cmap = mpl.cm.hot
norm = mpl.colors.Normalize(vmin=-1 * outlier, vmax=outlier)
cmap.set_over('green')
cmap.set_under('green')
cmap.set_bad('green')
plt.xlim(0,35)
plt.ylim(0,35)
fig, ax = plt.subplots()
ax.set_aspect('equal')
cb_ax=fig.add_axes([0.85, 0.1, 0.03, 0.8])
img = ax.imshow(np.ma.masked_values(data, outlier), cmap=cmap, norm=norm, interpolation='none',vmax=outlier)
cb = mpl.colorbar.ColorbarBase(cb_ax, cmap=cmap, norm=norm, extend='both')
##axim = plt.subplot2grid(shape, loc, rowspan=1)

## phlo tree
image_file = cbook.get_sample_data('mytree.png',asfileobj=False)
image = plt.imread(image_file)
phyl_ax=fig.add_axes([0.10,0.1, 0.03, 0.8])
phyl_ax.imshow(image,interpolation='nearest')

热图将位于左侧,树的图像将插入右侧。有了上面的代码,我就得到了……

右侧添加了一些东西,但显然它不是应该的样子。 起初我以为我将 phyl_ax 的尺寸设置得太小,但是当我尝试增加它时,甚至之前的“东西”也没有被添加。

有人能指出我哪里出错了吗?

【问题讨论】:

    标签: python image matplotlib heatmap


    【解决方案1】:

    您同时调用subplots,默认情况下,它为您提供一个轴,还通过add_axes 添加轴。你应该做一个或另一个,例如

    ...
    fig = plt.figure()
    ht_ax = fig.add_axes([0.1, 0.1, 0.3, 0.8])
    cb_ax = fig.add_axes([0.45, 0.3, 0.02, 0.4])
    phyl_ax = fig.add_axes([0.6, 0.1, 0.3, 0.8])
    
    ...
    

    --或--

    ...
    fig, ax = plt.subplots(1,2)
    fig.subplots_adjust(left=0.15)
    ht_ax = ax[0]
    phyl_ax = ax[1]
    cb_ax=fig.add_axes([0.05, 0.3, 0.02, 0.4])
    
    ...
    

    您可以使用subplots_adjustset_aspect 调整布局。您还可以使用colorbar.make_axes 来获得适当大小的颜色条轴。在这里,我还使用了grid_spec 来使绘图成为我喜欢的大小比例

    gs = gridspec.GridSpec(1, 2, width_ratios=[3, 2]) 
    ht_ax = plt.subplot(gs[0])
    phyl_ax = plt.subplot(gs[1])
    cb_ax, kw = mpl.colorbar.make_axes(ht_ax, shrink=0.55)
    ...
    cb = mpl.colorbar.ColorbarBase(ax=cb_ax, cmap=cmap, norm=norm, extend='both', **kw)
    

    【讨论】:

    • 抱歉,我需要澄清一下。我在 imshow 中使用了一个轴作为热图,所以根据您的第一个解决方案,我应该在使用它之前添加这个轴吗?
    猜你喜欢
    • 2021-10-14
    • 2012-06-17
    • 2013-02-16
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多