質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

639閲覧

Pythonのseabornを使った描画でグラフが欠けてしまう問題

yu_2_8_2

総合スコア34

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/02 14:34

編集2019/07/02 14:44

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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsunosuke

2019/07/03 01:37

google colaboratory で実行してみたんですけど、特にそのような現象は発生しませんでした。うーん。なんですかねえ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問