Python3においてseabornを使い、以下のようなグラフを描画したところ、棒グラフが一部欠けてしまう問題が起きてしまい、解決できなかったので質問致します。
元データは欠損していないのに、上の棒グラフのように一部が空白になってしまっています。使っている元データは、
Python
1,sell,buy 21266500.0,7080.162999999993,7887.70499999999 31267000.0,9434.789999999985,8699.905999999992 41267500.0,8669.356999999989,8709.396999999988 51268000.0,10290.783999999987,10807.234000000006 61268500.0,7674.379999999994,9919.84799999999 71269000.0,8410.835999999987,9825.764999999994 81269500.0,7426.230999999992,8645.949999999999 91270000.0,9725.52700000001,9770.12700000001 101270500.0,5800.483999999996,7389.384999999998 111271000.0,6327.216999999995,6080.826999999998 121271500.0,5667.035999999998,6720.258999999998 131272000.0,7630.950999999987,6970.472999999994 141272500.0,7232.453999999992,6594.132999999996 151273000.0,5720.694999999991,6804.305999999993 161273500.0,5913.246,7125.001999999991 171274000.0,6415.98399999999,6958.186000000002 181274500.0,4095.0789999999974,5907.626000000001 191275000.0,6683.923999999994,7450.086999999998 201275500.0,5779.654000000001,5982.106999999998 211276000.0,4416.273999999997,4123.771000000002 221276500.0,5270.509999999998,5966.4839999999995 231277000.0,6196.101999999999,4822.448 241277500.0,5995.930999999997,5802.495999999995 251278000.0,8169.072999999996,6297.274999999994 261278500.0,7309.958999999992,6805.991999999991 271279000.0,7532.768999999994,6482.382999999999 281279500.0,4458.555999999997,5467.338999999996 291280000.0,7150.485000000003,6462.298000000006 301280500.0,5400.176999999998,5108.753999999996 311281000.0,4397.802999999998,5637.962999999995 321281500.0,5018.178999999994,5098.839999999999 331282000.0,5407.141999999994,7199.846000000012 341282500.0,5265.837999999994,5470.194999999995 351283000.0,5512.586999999998,7553.964999999999 361283500.0,5102.564999999997,5648.476999999997 371284000.0,5670.857999999995,6446.178999999996 381284500.0,4172.767999999998,4165.134999999999 391285000.0,5525.943999999996,6672.560999999999 401285500.0,3098.524999999999,3281.66 411286000.0,3981.7589999999977,4630.513999999998 421286500.0,5154.528999999996,3832.3529999999987 431287000.0,4435.256999999999,4495.774 441287500.0,3777.8209999999967,3697.864000000002 451288000.0,5424.341999999997,5928.1079999999965 461288500.0,3915.1930000000043,5235.970999999997 471289000.0,4734.311999999999,4787.4199999999955 481289500.0,3863.9769999999994,3341.637 491290000.0,6162.809000000001,5219.105999999996 501290500.0,2936.725000000001,2341.5260000000017 511291000.0,3621.588999999997,4956.322999999998 521291500.0,3650.6079999999947,5178.271999999998 531292000.0,2866.845000000001,3433.298999999998 541292500.0,1733.6340000000002,1932.2320000000004
のような、500おきにそれぞれ2つの値を保持しているデータです。(元データの一部を抜粋)
このデータを以下のコードで描画しています。(このコードではデータの生成はランダム)
(参考:https://teratail.com/questions/193446)
描画するデータ数が大きいためだと考え、データの解像度を落として行数を減らしてみたのですが解決しませんでした。
どなたか解決する方法をお持ちの方、どうぞご教授の程お願い致します。
Python
1from io import StringIO 2 3import pandas as pd 4import matplotlib.pyplot as plt 5import seaborn as sns 6 7sns.set(style="whitegrid") 8 9# データフレーム作成 10num_samples = 100 11data = pd.DataFrame( 12 { 13 "price": np.arange(855000, 855000 + num_samples), 14 "sell": np.random.uniform(0, 10, num_samples), 15 "buy": np.random.uniform(0, 10, num_samples), 16 } 17) 18 19# 描画する。 20fig, ax = plt.subplots(figsize=(7, 5)) 21 22# 棒グラフのデフォルトは右方向→ 23# sell の値は符号を反転させることで左方向←に棒グラフが作成されるようにする。 24copied = data.copy() # 元のデータを変更しないようにコピーしておく。 25copied["sell"] *= -1 26 27colors = ["#60D394", "#FFD97D"] # 色 28names = ["sell", "buy"] # 列名 29 30for name, color in zip(names, colors): 31 sns.barplot( 32 x=name, 33 y="price", 34 data=copied, 35 color=color, 36 label=name, 37 orient="h", 38 order=copied["price"].iloc[::-1], 39 ax=ax, 40 ) 41 42ax.set_xlabel("") # x 軸のラベル 43ax.set_ylabel("Price", fontsize=12) # y 軸のラベル 44# x 軸の範囲を左右対称になるように調整する。 45max_val = data[["sell", "buy"]].values.max() * 1.1 46ax.set_xlim(-max_val, max_val) 47 48# y 軸の目盛りの間隔を10個おきに調整する。 49yticks = ax.get_yticks() 50yticklabels = ax.get_yticklabels() 51ax.set_yticks(yticks[::10]) 52ax.set_yticklabels(yticklabels[::10]) 53 54ax.legend() # 凡例追加 55 56plt.show()
google colaboratory で実行してみたんですけど、特にそのような現象は発生しませんでした。うーん。なんですかねえ。
あなたの回答
tips
プレビュー