seabornのbarplotを使い、以下のようなグラフを作成したのですが、
このグラフ中に、任意のpriceの位置に横棒を引きたいのですが、調べてもよくわからなかったので質問致します。
どなたかご教授の程、よろしくお願いします。
以下追記
今回動かしているコードは以下になります。(ここで使っている配列は実際使っているものを簡略化したもの)
Python3
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.axhline(2000, c="r") # 新しく追加 55 56ax.legend() # 凡例追加 57 58plt.show()
これにより出力されるグラフが以下のようになり、(使っているデータが違いのでイメージ図)
引きたい箇所からずれたところに線が引かれてしまっています。
(ax.axhline(1100000, c="r")とすると大きくずれたところに横線が引かれグラフが崩れる。
ax.axhline(2000, c="r")とすると上のグラフのように描画している範囲に横線が引かれる。)
axhlineで指定しているyとbarplotのyがずれているようなのですが、どのように解決したらよいでしょうか?
ご教授頂けると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/25 03:17 編集
2019/06/25 04:25
2019/06/25 05:51