2013-05-21 4 views
0

나는 그와 같은 그림을 가지고 있으며 아래 오른손에 색상 막대 코드 (어떤 색상에 해당하는지)를 추가하고 싶습니다. 파이 차트가 아니라면 imshow에 사용 된 예제를 보았습니다.matlibplot을 사용하는 다중 원형 차트의 경우 단 하나의 색상 막대

#!/usr/bin/env python 
""" 
http://matplotlib.sf.net/matplotlib.pylab.html#-pie for the docstring. 
""" 
from pylab import * 

fracs = [33,33,33] 
starting_angle = 90 
axis('equal') 

for item in range(9): 
    color_vals = [-1, 0, 1] 
    my_norm = matplotlib.colors.Normalize(-1, 1) # maps your data to the range [0, 1] 
    my_cmap = matplotlib.cm.get_cmap('RdBu') # can pick your color map 

    patches, texts, autotexts = pie(fracs, labels = None, autopct='%1.1f%%', startangle=90, colors=my_cmap(my_norm(color_vals))) 
    subplot(3,3,item+1) 

    fracs = [33,33,33] 
    starting_angle = 90 
    axis('equal') 
    patches, texts, autotexts = pie(fracs, labels = None, autopct='%1.1f%%', startangle=90, colors=my_cmap(my_norm(color_vals))) 


for item in autotexts: 
    item.set_text("") 


subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=0.0, hspace=0.5) 

savefig('/home/superiois/Downloads/projectx3/GRAIL/pie1.png') 
show() 

또한 컬러 바 코드의 크기와 위치를 사용자 정의하는 방법을 알려주는 것이 좋습니다. 감사.

답변

2

일반적으로 범례는 불연속 값에 적합하고 연속 값의 색 막대는 적합합니다. 즉, mpl은 처음부터 컬러 바를 만들 수 있기 때문에 가능합니다.

import matplotlib.pyplot as plt 
import matplotlib as mpl 

fracs = [33,33,33] 
starting_angle = 90 

fig, axs = plt.subplots(3,3, figsize=(6,6)) 
fig.subplots_adjust(hspace=0.1,wspace=0.0) 

axs = axs.ravel() 

for n in range(9): 
    color_vals = [-1, 0, 1] 
    my_norm = mpl.colors.Normalize(-1, 1) # maps your data to the range [0, 1] 
    my_cmap = mpl.cm.get_cmap('RdBu', len(color_vals)) # can pick your color map 

    patches, texts, autotexts = axs[n].pie(fracs, labels = None, autopct='%1.1f%%', startangle=90, colors=my_cmap(my_norm(color_vals))) 
    axs[n].set_aspect('equal') 

    for item in autotexts: 
     item.set_text("") 

ax_cb = fig.add_axes([.9,.25,.03,.5]) 
cb = mpl.colorbar.ColorbarBase(ax_cb, cmap=my_cmap, norm=my_norm, ticks=color_vals) 

cb.set_label('Some label [-]') 
cb.set_ticklabels(['One', 'Two', 'Three']) 

사용자 정의 틱 레이블을 추가하여 기본값으로 설정하면 단순히 마지막 줄만 제거하면됩니다.

enter image description here