teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

補足()を追加

2019/06/24 14:45

投稿

yu_2_8_2
yu_2_8_2

スコア34

title CHANGED
File without changes
body CHANGED
@@ -73,7 +73,7 @@
73
73
  plt.show()
74
74
  ```
75
75
 
76
- これにより出力されるグラフが以下のようになり、
76
+ これにより出力されるグラフが以下のようになり、(使っているデータが違いのでイメージ図)
77
77
  ![イメージ説明](89988c151e70a281b153614acc5ef479.jpeg)
78
78
  引きたい箇所からずれたところに線が引かれてしまっています。
79
79
  (ax.axhline(1100000, c="r")とすると大きくずれたところに横線が引かれグラフが崩れる。

1

問題点を追加

2019/06/24 14:45

投稿

yu_2_8_2
yu_2_8_2

スコア34

title CHANGED
File without changes
body CHANGED
@@ -6,4 +6,77 @@
6
6
  ![イメージ説明](154cdda7eb6c7b2a264702229151908b.png)
7
7
  イメージとしては上のような感じにしたいです。
8
8
 
9
- どなたかご教授の程、よろしくお願いします。
9
+ どなたかご教授の程、よろしくお願いします。
10
+
11
+ ----------------------------------------------------------------
12
+ 以下追記
13
+
14
+ 今回動かしているコードは以下になります。(ここで使っている配列は実際使っているものを簡略化したもの)
15
+ ```Python3
16
+ from io import StringIO
17
+
18
+ import pandas as pd
19
+ import matplotlib.pyplot as plt
20
+ import seaborn as sns
21
+
22
+ sns.set(style="whitegrid")
23
+
24
+ # データフレーム作成
25
+ num_samples = 100
26
+ data = pd.DataFrame(
27
+ {
28
+ "price": np.arange(855000, 855000 + num_samples),
29
+ "sell": np.random.uniform(0, 10, num_samples),
30
+ "buy": np.random.uniform(0, 10, num_samples),
31
+ }
32
+ )
33
+
34
+ # 描画する。
35
+ fig, ax = plt.subplots(figsize=(7, 5))
36
+
37
+ # 棒グラフのデフォルトは右方向→
38
+ # sell の値は符号を反転させることで左方向←に棒グラフが作成されるようにする。
39
+ copied = data.copy() # 元のデータを変更しないようにコピーしておく。
40
+ copied["sell"] *= -1
41
+
42
+ colors = ["#60D394", "#FFD97D"] # 色
43
+ names = ["sell", "buy"] # 列名
44
+
45
+ for name, color in zip(names, colors):
46
+ sns.barplot(
47
+ x=name,
48
+ y="price",
49
+ data=copied,
50
+ color=color,
51
+ label=name,
52
+ orient="h",
53
+ order=copied["price"].iloc[::-1],
54
+ ax=ax,
55
+ )
56
+
57
+ ax.set_xlabel("") # x 軸のラベル
58
+ ax.set_ylabel("Price", fontsize=12) # y 軸のラベル
59
+ # x 軸の範囲を左右対称になるように調整する。
60
+ max_val = data[["sell", "buy"]].values.max() * 1.1
61
+ ax.set_xlim(-max_val, max_val)
62
+
63
+ # y 軸の目盛りの間隔を10個おきに調整する。
64
+ yticks = ax.get_yticks()
65
+ yticklabels = ax.get_yticklabels()
66
+ ax.set_yticks(yticks[::10])
67
+ ax.set_yticklabels(yticklabels[::10])
68
+
69
+ ax.axhline(2000, c="r") # 新しく追加
70
+
71
+ ax.legend() # 凡例追加
72
+
73
+ plt.show()
74
+ ```
75
+
76
+ これにより出力されるグラフが以下のようになり、
77
+ ![イメージ説明](89988c151e70a281b153614acc5ef479.jpeg)
78
+ 引きたい箇所からずれたところに線が引かれてしまっています。
79
+ (ax.axhline(1100000, c="r")とすると大きくずれたところに横線が引かれグラフが崩れる。
80
+ ax.axhline(2000, c="r")とすると上のグラフのように描画している範囲に横線が引かれる。)
81
+ axhlineで指定しているyとbarplotのyがずれているようなのですが、どのように解決したらよいでしょうか?
82
+ ご教授頂けると幸いです。