0

私はそのようなプロットを持っており、右下にカラーバー コード (どの色がどの数字に対応するか) を追加したいと考えています。円グラフではなく imshow に使用される例を見ました。

#!/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()

また、カラーバー コードのサイズと位置をカスタマイズする方法を教えていただければ幸いです。ありがとう。

4

1 に答える 1

3

通常、凡例は離散値に、カラーバーは連続値に適しています。そうは言っても、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'])

デフォルト値を取得するには、最後の行を削除するだけです。

ここに画像の説明を入力

于 2013-05-21T10:19:06.090 に答える