複数のヒストグラムをオーバーレイし、それぞれをxy軸上でシフトしようとしています。これまでのところ、個々のプロットを生成し、イラストレーターを使用して最終的なプロットを設計していますが、すべてをスクリプトで実行したいと思います。長い間試してみましたが、うまくいきませんでした。小さなテキストケースを用意しました。このデータセットにはあまり意味がありませんが、私のデータにはかなり良い解決策です。誰かが助けてくれたらとても嬉しいです。ありがとう
オーバーレイされたヒストグラムを生成するサンプルコードは次のとおりです。
import random
import numpy
import matplotlib.pyplot as plt
%matplotlib inline
data1 = [random.gauss(3,2) for _ in range(400)]
data2 = [random.gauss(4,2) for _ in range(400)]
data3 = [random.gauss(5,2) for _ in range(400)]
bins = numpy.linspace(-10, 10, 100)
plt.xlim(0, 10)
plt.ylim(0, 25)
plt.hist(data3, bins, label='data3')
plt.hist(data2, bins, label='data2')
plt.hist(data1, bins, label='data1')
plt.legend(loc='upper right')
plt.savefig("trial01.pdf", transparent=True)
しかし、私が欲しい図はそれに似ています
おそらく、その内容とともに完全な軸をシフトしたいと思うでしょう。これには、各ヒストグラムを独自の軸にプロットし、軸を共有し、それぞれの軸の位置を設定する必要があります(ax.set_position
)。次に、必要に応じてティック、スパイン、ラベルをオフにすることができます。
import random
import numpy
import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox
data1 = [random.gauss(3,2) for _ in range(400)]
data2 = [random.gauss(4,2) for _ in range(400)]
data3 = [random.gauss(5,2) for _ in range(400)]
bins = numpy.linspace(-10, 10, 100)
fig, ax1 = plt.subplots()
ax2 = fig.add_subplot(111, sharex=ax1, sharey=ax1, label="ax2")
ax3 = fig.add_subplot(111, sharex=ax1, sharey=ax1, label="ax3")
ax1.set(xlim=(0, 10), ylim=(0, 25))
ax1.hist(data3, bins, label='data3', color="C2")
ax2.hist(data2, bins, label='data2', color="C1")
ax3.hist(data1, bins, label='data1', color="C0")
fig.legend(loc='upper right')
xshift=0.04; yshift=0.04
for i, ax in enumerate((ax3,ax2,ax1)):
ax.patch.set_visible(False)
pos = ax.get_position()
newpos = Bbox.from_bounds(pos.x0+i*xshift, pos.y0+i*yshift, pos.width, pos.height)
ax.set_position(newpos)
for sp in ["top", "right"]:
ax.spines[sp].set_visible(False)
if ax != ax3:
ax.spines["left"].set_visible(False)
ax.tick_params(labelleft=False, left=False, labelbottom=False)
fig.savefig("trial01.pdf", transparent=True)
plt.show()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加