回答編集履歴

2

d

2019/06/06 08:59

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -119,3 +119,143 @@
119
119
  ```
120
120
 
121
121
  ![イメージ説明](15fcb1aca7fd0512833a1fcb7d06bfa1.png)
122
+
123
+
124
+
125
+ ## 追記
126
+
127
+
128
+
129
+ 次の手順でできます。
130
+
131
+
132
+
133
+ 1. Axes.get_yticks() で y 軸の目盛りの位置一覧を取り出す。
134
+
135
+ 2. Axes.get_yticklabels() で y 軸の目盛りのラベル一覧を取り出す。
136
+
137
+ 3. Axes.set_yticks() で y 軸の目盛りの位置一覧を10個置きにスライスして設定する。
138
+
139
+ 4. Axes.set_yticklabels() で y 軸の目盛りのラベル一覧を10個置きにスライスして設定する。
140
+
141
+
142
+
143
+ ```python
144
+
145
+ from io import StringIO
146
+
147
+
148
+
149
+ import pandas as pd
150
+
151
+ import matplotlib.pyplot as plt
152
+
153
+ import seaborn as sns
154
+
155
+
156
+
157
+ sns.set(style="whitegrid")
158
+
159
+
160
+
161
+ # データフレーム作成
162
+
163
+ num_samples = 100
164
+
165
+ data = pd.DataFrame(
166
+
167
+ {
168
+
169
+ "price": np.arange(855000, 855000 + num_samples),
170
+
171
+ "sell": np.random.uniform(0, 10, num_samples),
172
+
173
+ "buy": np.random.uniform(0, 10, num_samples),
174
+
175
+ }
176
+
177
+ )
178
+
179
+
180
+
181
+ # 描画する。
182
+
183
+ fig, ax = plt.subplots(figsize=(7, 5))
184
+
185
+
186
+
187
+ # 棒グラフのデフォルトは右方向→
188
+
189
+ # sell の値は符号を反転させることで左方向←に棒グラフが作成されるようにする。
190
+
191
+ copied = data.copy() # 元のデータを変更しないようにコピーしておく。
192
+
193
+ copied["sell"] *= -1
194
+
195
+
196
+
197
+ colors = ["#60D394", "#FFD97D"] # 色
198
+
199
+ names = ["sell", "buy"] # 列名
200
+
201
+
202
+
203
+ for name, color in zip(names, colors):
204
+
205
+ sns.barplot(
206
+
207
+ x=name,
208
+
209
+ y="price",
210
+
211
+ data=copied,
212
+
213
+ color=color,
214
+
215
+ label=name,
216
+
217
+ orient="h",
218
+
219
+ order=copied["price"].iloc[::-1],
220
+
221
+ ax=ax,
222
+
223
+ )
224
+
225
+
226
+
227
+ ax.set_xlabel("") # x 軸のラベル
228
+
229
+ ax.set_ylabel("Price", fontsize=12) # y 軸のラベル
230
+
231
+ # x 軸の範囲を左右対称になるように調整する。
232
+
233
+ max_val = data[["sell", "buy"]].values.max() * 1.1
234
+
235
+ ax.set_xlim(-max_val, max_val)
236
+
237
+
238
+
239
+ # y 軸の目盛りの間隔を10個おきに調整する。
240
+
241
+ yticks = ax.get_yticks()
242
+
243
+ yticklabels = ax.get_yticklabels()
244
+
245
+ ax.set_yticks(yticks[::10])
246
+
247
+ ax.set_yticklabels(yticklabels[::10])
248
+
249
+
250
+
251
+ ax.legend() # 凡例追加
252
+
253
+
254
+
255
+ plt.show()
256
+
257
+ ```
258
+
259
+
260
+
261
+ ![イメージ説明](2e9f4dc611bfc62007037c9f5641b680.png)

1

d

2019/06/06 08:59

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
  )
52
52
 
53
- data = pd.read_csv(src, delim_whitespace=True, index_col=[0])
53
+ data = pd.read_csv(src, delim_whitespace=True)
54
54
 
55
55
 
56
56
 
@@ -74,11 +74,27 @@
74
74
 
75
75
  names = ["sell", "buy"] # 列名
76
76
 
77
+
78
+
77
79
  for name, color in zip(names, colors):
78
80
 
79
81
  sns.barplot(
80
82
 
83
+ x=name,
84
+
85
+ y="price",
86
+
87
+ data=copied,
88
+
89
+ color=color,
90
+
91
+ label=name,
92
+
93
+ orient="h",
94
+
81
- x=name, y="price", data=copied, color=color, label=name, orient="h", ax=ax
95
+ order=copied["price"].iloc[::-1],
96
+
97
+ ax=ax,
82
98
 
83
99
  )
84
100
 
@@ -102,4 +118,4 @@
102
118
 
103
119
  ```
104
120
 
105
- ![イメージ説明](51178b88492a77c263aa67fc35196704.png)
121
+ ![イメージ説明](15fcb1aca7fd0512833a1fcb7d06bfa1.png)