質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5612閲覧

Python、Bokehのグラフ表示でHoverToolによる数値表示について

Snow_Snow

総合スコア9

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/25 01:20

編集2020/04/26 01:58

pythonでBokehのライブラリを使い、グラフを描画させてウェブブラウザに表示させています。
マウスオーバーしたときに該当データを表示させたいのですが、添付の写真のように数値が表示されません。
イメージ説明
期間のところには、'31-Dec-2018'のような形で表示させたいと考えています。
Bokehのhovertoolの使い方がまずいとは思うのですが、解決策が見つけられていません。
よろしくお願いいたします。

python

1from bokeh.io import output_file, show 2from bokeh.layouts import row, column 3from bokeh.models import ColumnDataSource, HoverTool 4from bokeh.plotting import figure 5from bokeh.transform import dodge 6 7#該当のリスト 8periods=['31-Dec-2018', '31-Mar-2019', '30-Jun-2019', '30-Sep-2019', '31-Dec-2019'] 9Total_revenue =[84370000000, 57920000000, 53740000000, 63940000000, 91720000000] 10Gross_sales_profit =[23030000000, 13240000000, 11490000000, 15480000000, 25300000000] 11NetIncome_Value =[19970000000, 11560000000, 10040000000, 13690000000, 22240000000] 12company_name = 'Apple Inc' 13data = {'期間' : periods, 14 '売上':Total_revenue, 15 '営業利益': Gross_sales_profit, 16 '純利益': NetIncome_Value} 17source = ColumnDataSource(data= data) 18 19#グラフの上下にマージンをつくるための小細工 20y_min = min(Gross_sales_profit) 21if min(Gross_sales_profit) <= 0 or min(NetIncome_Value) <= 0 : 22 if min(Gross_sales_profit) <= min(NetIncome_Value) : 23 y_min = min(Gross_sales_profit) 24 else : 25 y_min = min(NetIncome_Value) 26else : 27 y_min =0 28 29#グラフ描画 30p = figure(x_range=periods, y_range=((y_min*1.1), (max(Total_revenue)*1.2)),sizing_mode="scale_width", plot_height=400, title=company_name +" 売上高/営業利益/純利益", 31 toolbar_location=None, tools="") 32 33p.vbar(x=dodge('期間', -0.25, range=p.x_range), top='売上', width=0.2, source=source, 34 color="#4331F5", legend_label="売上") 35 36p.vbar(x=dodge('期間', 0.0, range=p.x_range), top='営業利益', width=0.2, source=source, 37 color="#F0BE2C", legend_label="営業利益") 38 39p.vbar(x=dodge('期間', 0.25, range=p.x_range), top='純利益', width=0.2, source=source, 40 color="#e84d60", legend_label="純利益") 41 42#ホバーツール、これが問題か?? 43TOOLTIPS1 = [ 44 ('期間', '@期間'), 45 ('売上', '@売上'), 46 ('営業利益', '@営業利益'), 47 ('純利益', '@純利益') 48] 49 50p.add_tools(HoverTool(tooltips=TOOLTIPS1)) 51p.x_range.range_padding = 0.1 52p.xgrid.grid_line_color = None 53p.add_layout(p.legend[0], "below") 54p.legend.orientation = "horizontal" 55 56show(p, sizing_mode="scale_width") 57output_file(company_name + ".html") 58コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

closeされているので恐縮ですがHoverToolで表示したい変数名が日本語の場合
以下のように波括弧で囲えば日本語のままでも表示できることに最近気づいたのでシェアします。

python3

1TOOLTIPS1 = [ 2 ('期間', '@{期間}'), 3 ('売上', '@{売上}'), 4 ('営業利益', '@{営業利益}'), 5 ('純利益', '@{純利益}') 6]

投稿2020/10/09 15:54

EM1206

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Snow_Snow

2020/10/09 17:07

ありがとうございます!!
guest

0

自己解決

Bokehのデータソース作成時に、漢字を含まず全て英語でデータを作成したところ、うまく表示されるようになりました。
Hover Toolの設定内には漢字が使えるようです。
このようにちゃんとラベル、数値が表示されるようになりました。

python

1from bokeh.io import output_file, show 2from bokeh.layouts import row, column 3from bokeh.models import ColumnDataSource, HoverTool 4from bokeh.plotting import figure 5from bokeh.transform import dodge 6 7company_name = 'Apple Inc' 8 9periods=['31-Dec-2018', '31-Mar-2019', '30-Jun-2019', '30-Sep-2019', '31-Dec-2019'] 10Total_revenue =[84370000000, 57920000000, 53740000000, 63940000000, 91720000000] 11Gross_sales_profit =[23030000000, 13240000000, 11490000000, 15480000000, 25300000000] 12NetIncome_Value =[19970000000, 11560000000, 10040000000, 13690000000, 22240000000] 13 14 15data = {'Quarter' : periods, 16 'Revenue':Total_revenue, 17 'GSP': Gross_sales_profit, 18 'NetProfit': NetIncome_Value} 19 20source = ColumnDataSource(data= data) 21 22y_min = min(Gross_sales_profit) 23if min(Gross_sales_profit) <= 0 or min(NetIncome_Value) <= 0 : 24 if min(Gross_sales_profit) <= min(NetIncome_Value) : 25 y_min = min(Gross_sales_profit) 26 else : 27 y_min = min(NetIncome_Value) 28else : 29 y_min =0 30 31 32 33p = figure(x_range=periods, y_range=((y_min*1.1), (max(Total_revenue)*1.2)),sizing_mode="scale_width", plot_height=400, title=company_name +" 売上/営業利益/純利益", 34 toolbar_location=None, tools="") 35 36p.vbar(x=dodge('Quarter', -0.25, range=p.x_range), top='Revenue', width=0.2, source=source, 37 color="#4331F5", legend_label="売上") 38 39p.vbar(x=dodge('Quarter', 0.0, range=p.x_range), top='GSP', width=0.2, source=source, 40 color="#F0BE2C", legend_label="営業利益") 41 42p.vbar(x=dodge('Quarter', 0.25, range=p.x_range), top='NetProfit', width=0.2, source=source, 43 color="#e84d60", legend_label="純利益") 44 45TOOLTIPS1 = [ 46 ('期間', '@Quarter'), 47 ('売上', '@Revenue'), 48 ('営業利益', '@GSP'), 49 ('純利益', '@NetProfit') 50] 51 52p.add_tools(HoverTool(tooltips=TOOLTIPS1)) 53p.x_range.range_padding = 0.1 54p.xgrid.grid_line_color = None 55p.add_layout(p.legend[0], "below") 56p.legend.orientation = "horizontal" 57 58show(p, sizing_mode="scale_width") 59output_file(company_name + ".html") 60

投稿2020/04/27 07:12

編集2020/04/27 07:15
Snow_Snow

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問