web-dev-qa-db-ja.com

matplotlibプロットを90度回転させるにはどうすればよいですか?

Matplotlibに、左上象限、右上象限、右下象限の3つのサブプロットを含む図を作成しました。右上の図には2次元の画像が含まれており、他の2つのプロットはそれぞれY軸とX軸への投影です。左上象限サブプロットを反時計回りに90度回転させて、そのプロットのx軸が2次元プロットのy軸に沿って配置されるようにします。

サブプロットについては、xデータとyデータを反転させたり、軸ラベルを回転させたり、左側にプロットタイトルを作成したりできることに気付きました。 90度までしかし、私はそれを見つけることができません。

これを行う簡単な方法はありますか?

16
user3443148

Pyplot 1Dプロットの多くは、独自の引数内に「向き」または「ピボット」オプションがあるようです。たとえば、matplotlib.orgのヒストグラムの例から:

matplotlib.pyplot.hist(x, 
                       bins=10, 
                       range=None, 
                       normed=False, 
                       weights=None, 
                       cumulative=False, 
                       bottom=None, 
                       histtype=u'bar', 
                       align=u'mid', 
                       orientation=u'vertical', 
                       rwidth=None, 
                       log=False, 
                       color=None, 
                       label=None, 
                       stacked=False, 
                       hold=None, 
                       **kwargs)

水平に変更するだけです(orientation=u'vertical'

10
nicsqr

多くの関数の別の興味深いパラメーターはtransformです(orientationpivotとは異なり、このパラメーターは plot でも使用できます=)。

transformパラメーターを使用すると、 Transform オブジェクトで指定された変換を追加できます。例として、これはランダムデータのプロットを回転させる方法です。

import numpy
from matplotlib import pyplot, transforms

data = numpy.random.randn(100)

# first of all, the base transformation of the data points is needed
base = pyplot.gca().transData
rot = transforms.Affine2D().rotate_deg(90)

# define transformed line
line = pyplot.plot(data, 'r--', transform= rot + base)
# or alternatively, use:
# line.set_transform(rot + base)

pyplot.show()

パッチを回転させる方法の例については、 this answer を参照してください。これは、この答えのインスピレーションの源でもありました。


更新

最近、pyplot.scatter(およびその他のtransform)を使用したときに、PathCollectionsパラメーターが期待どおりに機能しないことがわかりました。この場合、offset_transformを使用できます。 offset_transformの設定方法の詳細については、 この回答 を参照してください。

7
Mr Tsjolder

私が想像できる最も簡単な方法は、図で scipy rotateメソッド を使用することです。ただし、これにはPython Imaging Libraryが必要です。これはPython 3.x.

import scipy
from scipy import ndimage
import matplotlib.pyplot as plt

Your_Plot = plt.plot(X,Y)
Rotated_Plot = ndimage.rotate(Your_Plot, 90)

plt.figure(figsize=(12.5, 2.5))

plt.subplot(2,2,1)
plt.imshow(Rotated_Plot, cmap=plt.cm.gray)
plt.axis('off')

plt.show()

それはそれを行うにはあまり良い方法ではありませんが、ラッパー関数または単にXとYのデータを手動で交換する、軸ラベルを回転させるなどの方がはるかに簡単だと思います。

3
MackM
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

fig=plt.figure() 
ax=fig.add_subplot(111,projection='3d')

# for rotate the axes and update.
for angle in range(0,360): 
    ax.view_init(30,angle)

plt.show()
2
sameer_nubia