2014-02-28 49 views
1

我试图插入一个PNG图片的情节的右侧,这里提到的代码如下: Combine picture and plot with Python Matplotlib将图片添加到情节-matplotlib PYTHON

这里是我曾尝试:

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') 

Th热图将在左侧,树的图像将插入右侧。这里与上面的代码是什么我得到...

Image not added properly:-----

Here is the image I am trying to add:----

没有被添加到右侧的东西,但显然它是不是应该像的方式。 起初我以为我设置phyl_ax的尺寸太小,但是当我尝试增加它时,即使之前的“东西”也没有被添加。

有人能指出我出错的地方吗?

回答

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) 
+0

对不起,我需要一个小的澄清。有一个轴用于热图的imshow,所以根据您的第一个解决方案,我应该在使用它之前添加此轴? – user2998764

+0

是的,看我更新的答案。 – hackyday

+0

Gridspec完美地完成了这个技巧,谢谢 – user2998764