[解決済み] Python Plotly 平均線付き複数ヒストグラム
2022-03-02 08:29:11
質問
Plotlyで2つのヒストグラムを一緒にプロットする必要があります。それぞれのヒストグラムには、平均値を示すラベルと、平均値を示す線が描かれています。 現在、私のコードは両方のヒストグラムを描画しますが、ラベルと一緒に平均線を追加する方法がわかりません。 何かアイデアはありますか?
import numpy as np
import random
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go
init_notebook_mode() # run at the start of every ipython notebook
a = np.random.normal(1500, 100, 1000)
b = np.random.normal(1500, 150, 1000)
trace1 = go.Histogram(
x=a,
opacity=0.75,
histnorm='probability',
name='> 180 t/h'
)
trace2 = go.Histogram(
x=b,
opacity=0.75,
histnorm='probability',
name='< 160 t/h',
yaxis='y2'
)
data = [trace1, trace2]
layout = go.Layout(
title='title',
barmode='overlay',
xaxis=dict(
title=''
),
yaxis=dict(
title='Normalized Frequency < 160 t/h'
),
yaxis2=dict(
title='Normalized Frequency > 180 t/h',
anchor='free',
overlaying='y',
side='right',
position=1
)
)
fig = go.Figure(data=data, layout=layout)
iplot(fig)
解決方法は?
何時間もいじくりまわして、だいたい動くものにたどり着いたと思います。
a = np.random.normal(1200, 100, 1000)
b = np.random.normal(1500, 150, 1000)
df = pd.DataFrame(np.transpose([a,b]), columns=['a','b'])
a = df.a
b = df.b
trace1 = go.Histogram(
x=df.a,
opacity=0.75,
histnorm='probability',
name='> 180 t/h'
)
trace2 = go.Histogram(
x=df.b,
opacity=0.75,
histnorm='probability',
name='< 160 t/h',
yaxis='y2'
)
# Create traces
data = [trace1, trace2]
layout = go.Layout(
title='item',
barmode='overlay',
xaxis=dict(
title=''
),
yaxis=dict(
title='Normalized Frequency < 160 t/h'
),
yaxis2=dict(
title='Normalized Frequency > 180 t/h',
anchor='free',
overlaying='y',
side='right',
position=1
),
# Mean lines
shapes= [{'line': {'color': '#0099FF', 'dash': 'solid', 'width': 1},
'type': 'line',
'x0': df.a.mean(),
'x1': df.a.mean(),
'xref': 'x',
'y0': -0.1,
'y1': 1,
'yref': 'paper'},
{'line': {'color': '#FDAB5A', 'dash': 'solid', 'width': 1},
'type': 'line',
'x0': df.b.mean(),
'x1': df.b.mean(),
'xref': 'x',
'y0': -0.1,
'y1': 1,
'yref': 'paper'}],
# Annotations
annotations=[
dict(
x=df.a.mean(),
y=1,
xref='x',
yref='paper',
text="Mean a = {:,.0f}".format(df.a.mean()),
showarrow=True,
arrowhead=7,
ax=1,
ay=1,
axref='paper',
ayref='paper'
),
dict(
x=df.b.mean(),
y=0.95,
xref='x',
yref='paper',
text="Mean b = {:,.0f}".format(df.b.mean()),
showarrow=True,
arrowhead=7,
ax=1,
ay=1,
axref='paper',
ayref='paper'
)
]
)
fig = go.Figure(data=data, layout=layout)
py.iplot(fig)
当初は
cufflinks
. これは問題なく動作します。
import cufflinks as cf
df.iplot(kind='histogram', histnorm='probability', barmode='overlay',
vline=[dict(x=df.a.mean(),color='#5283AD'), dict(x=df.b.mean(),color='#FDAB5A')])
しかし、アノテーションも追加しようとすると、vlinesが削除されてしまいます。
結局、私はasFigureを使って、Vlineを含むplotdictを返しましたが、レイアウトは返されませんでした。それから、上の解決策を手動で作成するために、shapes ビットを抽出しました。
# Return a dict
plotdict = df.iplot(kind='histogram', histnorm='probability', barmode='overlay',
vline=[dict(x=df.a.mean(),color='#5283AD'), dict(x=df.b.mean(),color='#FDAB5A')],
asFigure=True)
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
Python関数の高度な応用を解説
-
[解決済み] Pythonで "with open "を使って複数のファイルを開くにはどうしたらいいですか?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] virtualenvで異なるバージョンのPythonを使用する
-
[解決済み] Pythonで改行(行継続)をするにはどうしたらいいですか?
-
[解決済み] Pythonで大きなファイルの行数を安価に取得する方法は?
-
[解決済み] Pythonのsuper()は多重継承でどう動くのか?
-
[解決済み] Pythonの関数定義における->の意味とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
Python Decorator 練習問題
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】ValueError: xとyは同じサイズでなければならない