質問編集履歴

2

投稿文の完成

2022/07/20 11:23

投稿

eri555
eri555

スコア8

test CHANGED
@@ -1 +1 @@
1
- plotly.expressのtimelineでバーが表示されかったり、太さが不ぞろだったりする
1
+ plotly.expressのtimelineでバーの太さバラバラのを統一し、太くした
test CHANGED
@@ -1,30 +1,110 @@
1
- **質問を書いている途中で投稿されてしまいました。
2
- 今本文編集中です。申し訳ございません。**
3
-
4
1
  ### 前提
5
2
 
6
3
 
7
4
  工場で装置がいつどんな状態にあるのかを一目でわかるために、
8
5
  plotlyのtimelineを使って可視化しようとしています。
9
6
 
7
+ 使用Pythonのバージョン:Python 3.9.7 64-bit
8
+ 使用ライブラリのバージョン:plotly 5.9.0
9
+
10
10
  ### 実現したいこと
11
11
 
12
- 状態別に色分けしたいです。
12
+ 状態別に色分けし、バーの太さを統一したいです。
13
13
 
14
14
  ### 発生している問題
15
-
16
- ### 該当ソースコード
15
+ 色分けすると、色によってバー太さがばらつきます。
17
-
18
- ```ここに言語名を入力
19
16
 
20
17
 
18
+ 書いたコードはこちらです。
19
+
20
+ ```python
21
+ from io import StringIO
22
+ import pandas as pd
23
+ import plotly.express as px
24
+ import plotly.io as pio
25
+ import datetime as dt
26
+
27
+ # csvファイルの読み込み
28
+ csv = """Date,Start,Finish,Mode
29
+ 2022-07-01,2000-01-01 01:00:00.000,2000-01-01 03:01:00.000,running
30
+ 2022-07-02,2000-01-01 04:00:00.000,2000-01-01 06:00:00.000,running
31
+ 2022-07-02,2000-01-01 07:00:00.000,2000-01-01 12:00:00.000,stay
32
+ 2022-07-04,2000-01-01 01:00:00.000,2000-01-01 01:00:00.000,running
33
+ 2022-07-05,2000-01-01 01:00:00.000,2000-01-01 04:00:00.000,running
34
+ 2022-07-05,2000-01-01 13:00:00.300,2000-01-01 16:00:00.000,stay"""
35
+ df = pd.read_csv(StringIO(csv))
36
+
37
+ # plotlyを使用した稼働状の可視化
38
+ fig = px.timeline(
39
+ df,
40
+ x_start="Start",
41
+ x_end="Finish",
42
+ y="Date",
43
+ title=f"稼働状況",
44
+ hover_name="Mode",
45
+ hover_data=["Date","Start","Finish","Mode"],
46
+ color="Mode",
47
+ )
48
+ # 横軸のレイアウト修正
49
+ fig.update_xaxes(
50
+ tickformat="%H:%M:%S", # 横軸の書式を変更
51
+ )
52
+ # 縦軸のレイアウト修正
53
+ fig.update_yaxes(
54
+ tickformat="%m月%d日", # 縦軸の書式を変更
55
+ autorange='reversed', # 縦軸の向きを逆にする
56
+ )
57
+ # その他レイアウト修正
58
+ fig.update_layout(
59
+ width=900,
60
+ height=600,
61
+ xaxis=dict(title=None,
62
+ range=(dt.time(0, 0, 0),
63
+ dt.time(23, 59, 59))),
64
+ yaxis=dict(title=None,
65
+ dtick="D0",
66
+ showgrid=True,
67
+ ),
68
+ )
69
+ fig.show()
70
+ pio.write_html(fig,file="稼働状況.html")
21
71
  ```
72
+ この結果、下図のように表示されるバーの太さが色によってまちまちとなってしまいます。
73
+
74
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-20/7779bfdb-e75d-463e-aa6f-55e07595a700.png)
22
75
 
23
76
  ### 試したこと
77
+ stackoverflowに似たような記事があったので、この記事を読み、上記コードに以下のコードを足してみました。
24
78
 
25
- ここに題に対して試したことを記載してください。
79
+ [stackoverflowの類似質](https://stackoverflow.com/questions/64665728/plotly-how-to-prevent-varying-thickness-of-bars-in-a-gantt-diagram)
26
80
 
81
+ ```python
82
+ f2 = fig.full_figure_for_development(warn=False)
83
+ f2.layout.barmode = 'group'
27
- ### 補足情報(FW/ツールバージョンなど)
84
+ # figをf2に変えたで、以下のように出力も変更
85
+ f2.show()
86
+ pio.write_html(f2,file="稼働状況.html")
87
+ ```
88
+ すると、下図のように、全体的にバーが細くなってしまいます。
28
89
 
29
- ここにより詳細な情報を記載してください。
90
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-20/6b88ef70-d43e-485f-ad77-c75e3536c010.png)
30
91
 
92
+ バーを太くするために、公式のドキュメントを読んで、
93
+
94
+ [plotly.graph_objects.Layoutの公式ドキュメント](https://plotly.com/python-api-reference/generated/plotly.graph_objects.Layout.html)
95
+
96
+ 以下の行を付け足しましたが、線はわずかしか太くなりません。もっと太くしたいです。
97
+ ```python
98
+ f2.layout.bargap = 0 # 0~1の数
99
+ f2.layout.bargroupgap = 0.5 # 0~1の数
100
+ ```
101
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-20/e40f0403-a0c4-4272-8ffa-d263090462d2.png)
102
+
103
+ 同じDateでも色によってバーの高さが微妙に違っているため、
104
+ barmode='group'にすることによって、同じDateの中を色ごとに分割してバーをだしているのではないかと思います。
105
+
106
+ 対処として、バーのbarmodeを'stack'や他('overlay', 'relative')に変えてみましたが、線の太さを統一&太くするというのはできませんでした。
107
+
108
+ 他にどんな手があるでしょうか。
109
+ 教えてください。よろしくお願いいたします。
110
+

1

本文記入中に誤って投稿した

2022/07/20 08:59

投稿

eri555
eri555

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,8 @@
1
+ **質問を書いている途中で投稿されてしまいました。
2
+ 今本文編集中です。申し訳ございません。**
3
+
1
4
  ### 前提
5
+
2
6
 
3
7
  工場で装置がいつどんな状態にあるのかを一目でわかるために、
4
8
  plotlyのtimelineを使って可視化しようとしています。