質問編集履歴

2

補足()を追加

2019/06/24 14:45

投稿

yu_2_8_2
yu_2_8_2

スコア34

test CHANGED
File without changes
test CHANGED
@@ -148,7 +148,7 @@
148
148
 
149
149
 
150
150
 
151
- これにより出力されるグラフが以下のようになり、
151
+ これにより出力されるグラフが以下のようになり、(使っているデータが違いのでイメージ図)
152
152
 
153
153
  ![イメージ説明](89988c151e70a281b153614acc5ef479.jpeg)
154
154
 

1

問題点を追加

2019/06/24 14:45

投稿

yu_2_8_2
yu_2_8_2

スコア34

test CHANGED
File without changes
test CHANGED
@@ -15,3 +15,149 @@
15
15
 
16
16
 
17
17
  どなたかご教授の程、よろしくお願いします。
18
+
19
+
20
+
21
+ ----------------------------------------------------------------
22
+
23
+ 以下追記
24
+
25
+
26
+
27
+ 今回動かしているコードは以下になります。(ここで使っている配列は実際使っているものを簡略化したもの)
28
+
29
+ ```Python3
30
+
31
+ from io import StringIO
32
+
33
+
34
+
35
+ import pandas as pd
36
+
37
+ import matplotlib.pyplot as plt
38
+
39
+ import seaborn as sns
40
+
41
+
42
+
43
+ sns.set(style="whitegrid")
44
+
45
+
46
+
47
+ # データフレーム作成
48
+
49
+ num_samples = 100
50
+
51
+ data = pd.DataFrame(
52
+
53
+ {
54
+
55
+ "price": np.arange(855000, 855000 + num_samples),
56
+
57
+ "sell": np.random.uniform(0, 10, num_samples),
58
+
59
+ "buy": np.random.uniform(0, 10, num_samples),
60
+
61
+ }
62
+
63
+ )
64
+
65
+
66
+
67
+ # 描画する。
68
+
69
+ fig, ax = plt.subplots(figsize=(7, 5))
70
+
71
+
72
+
73
+ # 棒グラフのデフォルトは右方向→
74
+
75
+ # sell の値は符号を反転させることで左方向←に棒グラフが作成されるようにする。
76
+
77
+ copied = data.copy() # 元のデータを変更しないようにコピーしておく。
78
+
79
+ copied["sell"] *= -1
80
+
81
+
82
+
83
+ colors = ["#60D394", "#FFD97D"] # 色
84
+
85
+ names = ["sell", "buy"] # 列名
86
+
87
+
88
+
89
+ for name, color in zip(names, colors):
90
+
91
+ sns.barplot(
92
+
93
+ x=name,
94
+
95
+ y="price",
96
+
97
+ data=copied,
98
+
99
+ color=color,
100
+
101
+ label=name,
102
+
103
+ orient="h",
104
+
105
+ order=copied["price"].iloc[::-1],
106
+
107
+ ax=ax,
108
+
109
+ )
110
+
111
+
112
+
113
+ ax.set_xlabel("") # x 軸のラベル
114
+
115
+ ax.set_ylabel("Price", fontsize=12) # y 軸のラベル
116
+
117
+ # x 軸の範囲を左右対称になるように調整する。
118
+
119
+ max_val = data[["sell", "buy"]].values.max() * 1.1
120
+
121
+ ax.set_xlim(-max_val, max_val)
122
+
123
+
124
+
125
+ # y 軸の目盛りの間隔を10個おきに調整する。
126
+
127
+ yticks = ax.get_yticks()
128
+
129
+ yticklabels = ax.get_yticklabels()
130
+
131
+ ax.set_yticks(yticks[::10])
132
+
133
+ ax.set_yticklabels(yticklabels[::10])
134
+
135
+
136
+
137
+ ax.axhline(2000, c="r") # 新しく追加
138
+
139
+
140
+
141
+ ax.legend() # 凡例追加
142
+
143
+
144
+
145
+ plt.show()
146
+
147
+ ```
148
+
149
+
150
+
151
+ これにより出力されるグラフが以下のようになり、
152
+
153
+ ![イメージ説明](89988c151e70a281b153614acc5ef479.jpeg)
154
+
155
+ 引きたい箇所からずれたところに線が引かれてしまっています。
156
+
157
+ (ax.axhline(1100000, c="r")とすると大きくずれたところに横線が引かれグラフが崩れる。
158
+
159
+ ax.axhline(2000, c="r")とすると上のグラフのように描画している範囲に横線が引かれる。)
160
+
161
+ axhlineで指定しているyとbarplotのyがずれているようなのですが、どのように解決したらよいでしょうか?
162
+
163
+ ご教授頂けると幸いです。