2017-02-05 12 views
1

Уважаемые пользователи собрат Python,Нежелательные Colorbar и метки осей/сюжетные названия взаимодействия

Я стараюсь производить цветовые карты, комбинируя LinearSegmentedColormap в сочетании с Imshow, используя библиотеку Matplotlib, и я с трудом с фактическим Colorbar ,

Цветной бар не ведет себя так, как я хочу по умолчанию, то есть он слишком большой для моего графика. По умолчанию, я получаю это:

default colorbar

Таким образом, я использовал следующие строки кода, чтобы исправить Colorbar высоту, со ссылкой на this post:

ax = plt.gca() 
divider = make_axes_locatable(ax) 
cax = divider.append_axes("right", size="5%", pad=0.05) 
plt.colorbar(img2, cax=cax) 

тогда я получил это очень странный результат:

fixed graph

Я не могу понять, почему добавленные строки кода взаимодействуют с моим топором есть и названия сюжетов ... Почему они идут с цветной панелью?

Вот полный код:

import matplotlib.pyplot as plt 
import matplotlib.pylab as pylab 
import matplotlib.colors as colors 
import numpy as np 
from mpl_toolkits.axes_grid1 import make_axes_locatable  

#random data for example 
clmap = np.random.rand(30,500) 

#plot 2D color map 
fig = plt.figure() 
cmap2 = colors.LinearSegmentedColormap.from_list('my_colormap', ['blue','green','red'], 256) 
img2 = plt.imshow(clmap,interpolation='nearest',cmap = cmap2,origin='lower') 
ax = plt.gca() 
divider = make_axes_locatable(ax) 
cax = divider.append_axes("right", size="5%", pad=0.05) 
fig.colorbar(img2, cmap = cmap2, cax=cax) 
plt.title('color map of atom probab at iteration 1') 
plt.xlabel('atom id') 
plt.ylabel('layer') 
fig.savefig("map_p_1.png") 
plt.gcf().clear() 
+0

Не показывая нам actualy код в виде [mcve], мы также не «в состоянии понять, почему добавленные коды кода взаимодействуют с моей осью и названиями сюжетов ». – ImportanceOfBeingErnest

ответ

0

Вы смешивание pyplot состояния машины (plt) с объектно-ориентированным API.
После создания объекта вторых осей (cax) это будут текущие оси. После этого все команды pyplot применяются к этим осям.

Самый простой выход заключается в применении команды pyplot перед созданием новых осей:

import matplotlib.pyplot as plt 
import matplotlib.colors as colors 
import numpy as np 
from mpl_toolkits.axes_grid1 import make_axes_locatable  

#random data for example 
clmap = np.random.rand(30,500) 

#plot 2D color map 
fig = plt.figure() 
plt.title('color map of atom probab at iteration 1') 
plt.xlabel('atom id') 
plt.ylabel('layer') 
cmap2 = colors.LinearSegmentedColormap.from_list('my_colormap', ['blue','green','red'], 256) 
img2 = plt.imshow(clmap,interpolation='nearest',cmap = cmap2,origin='lower') 
ax = plt.gca() 
divider = make_axes_locatable(ax) 
cax = divider.append_axes("right", size="5%", pad=0.05) 
fig.colorbar(img2, cmap = cmap2, cax=cax) 

fig.savefig("map_p_1.png") 

plt.show() 
+0

Действительно, это работает! Благодаря! – Glxblt76