グラフから座標を得る方法について
現在、fill_betweenのなかでwhereを使おうと思ったのですがx座標もデータ数も違うので、できませんでした。
(x1, z1)=15点
(x2, z2)=3031点
以下がプログラムです。
f1 = np.loadtxt(filepath1)
f2 = np.loadtxt(filepath2)
x1, z1 = f1[:, 0], f1[:, 1]
x2, z2 = f2[:, 0], f2[:, 1]
##
plt.xlabel('X') # x軸のラベル
plt.ylabel('Z') # y軸のラベル
plt.plot(x1, z1, color="Black", alpha=0.8, linewidth=4.0, label="data1")
plt.plot(x2, z2, color="White", alpha=0.8, linewidth=4.0, label="data2")
##
plt.legend()
plt.fill_between(x1, z1, z2, where=z2>=z1, facecolor='green', interpolate=True)
plt.fill_between(x1, z1, z2, where=z2<=z1, facecolor='red', interpolate=True)
# その他,描画用オプション
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.ylim([-21.62, -21.46])
plt.grid(True) #グラフの枠を作成
plt.savefig("cm.png")
plt.show()
Traceback (most recent call last):
File "<ipython-input-2-883f16ec992c>", line 1, in <module>
runfile('C:/Users/Administartor/Desktop/タイトル無し0.py', wdir='C:/Users/Administartor/Desktop')
File "C:\Users\Administartor\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "C:\Users\Administartor\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Administartor/Desktop/タイトル無し0.py", line 46, in <module>
plt.fill_between(x1, z1, z2, where=z2>=z1, facecolor='green', interpolate=True)
ValueError: operands could not be broadcast together with shapes (3031,) (15,)
私の考えとしてはf1はただ単に点と点を繋いでいるだけなので、f2に合わせた座標が取得できればすべて解決すると思うのですが、描いたグラフから座標を抽出する方法がわからず質問することにしました。
・描いたグラフから座標(x1=x2)の(x1,z1)を抽出する方法
こういったことは可能でしょうか?
@kunifさんのコード
f1 = np.loadtxt(filepath1)
f2 = np.loadtxt(filepath2)
xw, zw = f1[:, 0], f1[:, 1] # x1, z1 を作業用配列に変える
x2, z2 = f2[:, 0], f2[:, 1]
z1 = np.array([]) # 空の z1 を作成しておく
for x in x2:
idx = np.where(xw == x) # 同じ X軸 値を探して
z1 = np.append(z1, zw[idx[0]]) # z1 に追加
##
plt.xlabel('X') # x軸のラベル
plt.ylabel('Z') # y軸のラベル
plt.plot(x2, z1, color="Black", alpha=0.8, linewidth=4.0, label="data1")
plt.plot(x2, z2, color="White", alpha=0.8, linewidth=4.0, label="data2")
##
plt.legend()
plt.fill_between(x2, z1, z2, where=z2>=z1, facecolor='green', interpolate=True)
plt.fill_between(x2, z1, z2, where=z2<=z1, facecolor='red', interpolate=True)
# その他,描画用オプション
plt.xticks(fontsize=10)
plt.yticks(fontsize=10)
plt.ylim([-21.62, -21.46])
plt.grid(True) #グラフの枠を作成
plt.savefig("cm.png")
plt.show()
fig = plt.figure()
エラー
Traceback (most recent call last):
File "<ipython-input-19-340b5a582673>", line 1, in <module>
runfile('C:/Users/Administartor/Desktop/t.py', wdir='C:/Users/Administartor/Desktop')
File "C:\Users\Administartor\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "C:\Users\Administartor\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Administartor/Desktop/t.py", line 45, in <module>
plt.plot(x2, z1, color="Black", alpha=0.8, linewidth=4.0, label="data1")
File "C:\Users\Administartor\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 3261, in plot
ret = ax.plot(*args, **kwargs)
File "C:\Users\Administartor\Anaconda3\lib\site-packages\matplotlib\__init__.py", line 1717, in inner
return func(ax, *args, **kwargs)
File "C:\Users\Administartor\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py", line 1372, in plot
for line in self._get_lines(*args, **kwargs):
File "C:\Users\Administartor\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 404, in _grab_next_args
for seg in self._plot_args(this, kwargs):
File "C:\Users\Administartor\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 384, in _plot_args
x, y = self._xy_from_xy(x, y)
File "C:\Users\Administartor\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 243, in _xy_from_xy
"have shapes {} and {}".format(x.shape, y.shape))
ValueError: x and y must have same first dimension, but have shapes (4,) and (2,)