2016-11-27 181 views
1

无法弄清楚如何简单地将颜色条添加到矩阵hexbinmatplotlib的地块。这是地块的7 7矩阵,这里的第一行代码的一部分:Matplotlib hexbin添加颜色条 - 对于傻瓜

#importing nec. libs 
import pandas as pd 
from pylab import rcParams 
from matplotlib import pyplot as PLT 
%matplotlib inline 

#reading data 
dataset_cat_coded_path = 'C:/Users/IBM_ADMIN/Documents/Sberbank/dataset_cat_coded.csv' 
dataset_cat_coded = pd.read_csv(dataset_cat_coded_path, encoding = 'cp1251') 
test_frame = dataset_cat_coded[['opf','priority', 'sales_method_id', 'is_block_vks','sector_id', 'segment_id', 'org_type_id']] 



#building figure 
rcParams['figure.figsize']=30,30 #fig. size 

#fig. initiation 
fig = PLT.figure() 

#setting parameters defining min and max luminance 
vmin = 0 
vmax=test_frame.shape[0] 

#building a row of plots 
ax1 = fig.add_subplot(7,7,2) 
ax1.hexbin(test_frame.opf, test_frame.priority,C=None,gridsize=12,bins=None,mincnt=1, vmin = vmin, vmax=vmax) 
ax1.set_title('priority') 
ax1.set_ylabel('OPF') 

ax2 = fig.add_subplot(7,7,3) 
ax2.hexbin(test_frame.opf, test_frame.sales_method_id,C=None,gridsize=12,bins=None,mincnt=1, vmin = vmin, vmax=vmax) 
ax2.set_title('sales_method_id') 

ax3 = fig.add_subplot(7,7,4) 
ax3.hexbin(test_frame.opf, test_frame.is_block_vks,C=None,gridsize=12,bins=None,mincnt=1, vmin = vmin, vmax=vmax) 
ax3.set_title('is_block_vks') 

ax4 = fig.add_subplot(7,7,5) 
ax4.hexbin(test_frame.opf, test_frame.sector_id,C=None,gridsize=12,bins=None,mincnt=1, vmin = vmin, vmax=vmax) 
ax4.set_title('sector_id') 

ax5 = fig.add_subplot(7,7,6) 
ax5.hexbin(test_frame.opf, test_frame.segment_id,C=None,gridsize=12,bins=None,mincnt=1, vmin = vmin, vmax=vmax) 
ax5.set_title('segment_id') 

ax6 = fig.add_subplot(7,7,7) 
ax6.hexbin(test_frame.opf, test_frame.org_type_id,C=None,gridsize=12,bins=None,mincnt=1, vmin = vmin, vmax=vmax) 
ax6.set_title('org_type_id') 

#colorbar attempt 
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7]) 
fig.colorbar(ax6, cax=cbar_ax, location='bottom') here 

错误文本:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-17-e885eb3cd39a> in <module>() 
    36 
    37 cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7]) 
---> 38 fig.colorbar(ax6, cax=cbar_ax, location='bottom') 

C:\Program Files\Anaconda3\lib\site-packages\matplotlib\figure.py in colorbar(self, mappable, cax, ax, use_gridspec, **kw) 
    1591     cax, kw = cbar.make_axes(ax, **kw) 
    1592   cax.hold(True) 
-> 1593   cb = cbar.colorbar_factory(cax, mappable, **kw) 
    1594 
    1595   self.sca(current_ax) 

C:\Program Files\Anaconda3\lib\site-packages\matplotlib\colorbar.py in colorbar_factory(cax, mappable, **kwargs) 
    1328   cb = ColorbarPatch(cax, mappable, **kwargs) 
    1329  else: 
-> 1330   cb = Colorbar(cax, mappable, **kwargs) 
    1331 
    1332  cid = mappable.callbacksSM.connect('changed', cb.on_mappable_changed) 

C:\Program Files\Anaconda3\lib\site-packages\matplotlib\colorbar.py in __init__(self, ax, mappable, **kw) 
    878   # Ensure the given mappable's norm has appropriate vmin and vmax set 
    879   # even if mappable.draw has not yet been called. 
--> 880   mappable.autoscale_None() 
    881 
    882   self.mappable = mappable 

AttributeError: 'AxesSubplot' object has no attribute 'autoscale_None' 

所得的情节: enter image description here

+0

有很多例子,所以你到目前为止尝试过什么?另外,你需要告诉你是否要为整个图形添加一个颜色条?如果是这样,所有数据的数据限制是否相同?或者你想每个图有一个彩条? – ImportanceOfBeingErnest

+0

数据限制是相同的,所以整个数字的1个色条。说实话,如果我能够在数字之前做到这一点,那也是可以的。问题是我无法理解在我的特殊情况下通过plt.colorbar()使其工作的参数。 –

+0

@ImportanceOfBeingErnest 溶液形成你已经引用的页面 'cbar_ax = fig.add_axes([0.85,0.15,0.05,0.7]) fig.colorbar(1M,CAX = cbar_ax)' 给出错误*'AxesSubplot 'object has no attribute'autoscale_None'* –

回答

0

正如我指出的评论this question显示了如何添加一个颜色条。

在你的代码

fig.colorbar(ax6, cax=cbar_ax, location='bottom') 

您尝试设置一个彩条的数字但没有指定哪个对象应该涉及。因此,你会得到一个错误,这基本上告诉你,你没有提供任何可映射的对象。

你需要做的是给你的hexbin图像的颜色,以便它知道实际绘制哪些颜色。

import numpy as np 
import matplotlib.pyplot as plt 

n = 1000 
x = np.random.standard_normal(n) 
y = 2.0 + 3.0 * x + 4.0 * np.random.standard_normal(n) 

fig, axes = plt.subplots(nrows=2, ncols=2) 
for ax in axes.flat: 
    im = ax.hexbin(x,y) 

fig.subplots_adjust(right=0.8) 
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7]) 
fig.colorbar(im, cax=cbar_ax) 

plt.show() 
+0

是的,非常感谢您提供最终答案! 现在我必须弄清楚如何改变它的大小,并把它带到整个矩阵的底部。 –

+0

这里的数字'fig.add_axes([0.85,0.15,0.05,0.7])'确定了颜色条的位置和大小。第一个数字定义了条的最左侧应该位于整个图的水平轴上的位置,左下角为零。 第二个数字在垂直轴上确定相同。如果数字为[0.1,0.1],则条从左下角延伸。第三个数字以图的部分(= 0.5 - >色条延伸一半的数字)来确定色条的长度。最后一个数字以相同的条件确定宽度。 –

+0

确实,['add_axes(rect)'](http://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure.add_axes)以矩形作为输入,其中'rect = [left,bottom,width ,高度]'。这些数字以图形坐标系统为单位(范围从左下角的“0,0”到右上角的“1,1”)。 – ImportanceOfBeingErnest