読者です 読者をやめる 読者になる 読者になる

CORDEA blog

Programming及びFedora21等のLinux OSのことが多めです。

matplotlibのPolar chartで重ね順を指定する

Python

棒グラフや凡例の重なり順についてはStack Overflowにかかれていますが、Polar chartの重なり順については慣れていない人では少し戸惑うかもしれませんのでメモ。

matplotlibにおける重なり順の指定にはzorderを使用します。

こんな感じのものを作る時。
f:id:CORDEA:20140929143312p:plain,h200

きちんと重なり順を指定しないとこうなることがあります。
f:id:CORDEA:20140929143632p:plain,h200


set_zorderで大きい値に指定したものが表に出ます。

sample

この場合は内側からプロットされるため、zorderを順番に9, 8, 7, 6, 5... というように指定しています。

import numpy as np
import matplotlib.pyplot as plt

theta = np.tile(0, 10)
radii = np.arange(2.0, 22.0, 2.0)
width  = np.pi*2
colors = theta

ax = plt.subplot(111, polar=True)
bars = ax.bar(theta, radii, width=width, bottom=0.0)

c = 0
for r, bar in zip(radii, bars):
    # ここでzorderの指定
    bar.set_zorder(10-c)
    if c % 2 == 0 or c == 0:
        bar.set_facecolor('#000000')
    else:
        bar.set_facecolor('#ffffff')
    bar.set_alpha(1.0)
    c += 1

plt.show()


余談ですがmatplotlibでplotした画像の背景が透過されたpngで保存したい場合はsavefigを使います。

plt.savefig('***.png', transparent=True)

参考



artists — Matplotlib 1.4.0 documentation