Matplotlibに、左上象限、右上象限、右下象限の3つのサブプロットを含む図を作成しました。右上の図には2次元の画像が含まれており、他の2つのプロットはそれぞれY軸とX軸への投影です。左上象限サブプロットを反時計回りに90度回転させて、そのプロットのx軸が2次元プロットのy軸に沿って配置されるようにします。
サブプロットについては、xデータとyデータを反転させたり、軸ラベルを回転させたり、左側にプロットタイトルを作成したりできることに気付きました。 90度までしかし、私はそれを見つけることができません。
これを行う簡単な方法はありますか?
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'
)
多くの関数の別の興味深いパラメーターはtransform
です(orientation
やpivot
とは異なり、このパラメーターは 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
の設定方法の詳細については、 この回答 を参照してください。
私が想像できる最も簡単な方法は、図で 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のデータを手動で交換する、軸ラベルを回転させるなどの方がはるかに簡単だと思います。
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()