

plt.fill_betweenでgreenの部分しか表示されません。どうすれば意図したグラフが得られるでしょうか？ (-が入っているから認識されない？)  
知っている方はぜひ教えていただけると助かります。

[code]

    import matplotlib.pyplot as plt
    import numpy as np
    
    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()
    fig = plt.figure()
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/tMwJn.png)](https://i.stack.imgur.com/tMwJn.png)

txtの中身は `(x, z)` の二次元配列です。

真のデータ

[code]

    16.8180 -21.4740
    17.0484 -21.6070
    17.2787 -21.4740
    17.4480 -21.4740
    17.6784 -21.6070
    17.9087 -21.4740
    18.0780 -21.4740
    18.3084 -21.6070
    18.5387 -21.4740
    18.7080 -21.4740
    18.9384 -21.6070
    19.1687 -21.4740
    19.3380 -21.4740
    19.5684 -21.6070
    19.7987 -21.4740
    
[/code]

一部回転B

[code]

    16.8180 -21.4740
    17.0484 -21.5070
    17.2787 -21.4740
    17.4480 -21.4740
    17.6784 -21.6570
    17.9087 -21.4740
    18.0780 -21.4740
    18.3084 -21.6070
    18.5387 -21.4740
    18.7080 -21.4740
    18.9384 -21.6070
    19.1687 -21.4740
    19.3380 -21.4740
    19.5684 -21.6070
    19.7987 -21.4740
    
[/code]

プログラムを訂正したところ次のようなエラーが表示されました。

[code]

    Traceback (most recent call last):
    
      File "<ipython-input-24-32532a3f4e19>", line 1, in <module>
        runfile('C:/Users/Administartor/Desktop/いいべ.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/いいべ.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,) 
    
[/code]


CC BY-SA 4.0
2019-11-08T04:44:03.377
60348
2021-01-21T09:02:45.307
2019-11-13T00:34:26.810
3060
36532
question
python pandas matplotlib テキストファイル
fill_betweenでwhereを認識させたい


「一部回転B」データの「X軸」の値が同じになっていることが前提ですが、  
コメントに書いた処理を質問記事のソースに組み込むと以下のようになるでしょう。

[code]

    xw, zw = f2[:, 0], f2[:, 1] # x2, z2 を作業用配列に変える
    z2 = z1.copy()              # z1 をコピーして z2 作成
    for x, z in zip(xw, zw):
        idx = np.where(x1 == x) # 同じ X軸 値を探してデータを書き換え
        z2[idx[0]] = z
    
    # ... 途中省略
    
    # data2 の X軸 は x1 に変える
    plt.plot(x1, z2, color="White", alpha=0.8, linewidth=4.0, label="data2")
    
[/code]


CC BY-SA 4.0
2019-11-13T03:55:15.200
60465
2019-11-13T03:55:15.200
26370
60348
answer