我试图在一个图表上绘制RPI、CPI和CPIH,其中一个HoverTool
显示了当您在图表的给定区域上平移时每个值的值。在
我最初尝试使用line()
分别添加每一行,哪种方法有效:
但是,HoverTool
只有在滚动到各个行时才能正常工作。在
我尝试过使用multi_line()
例如:
combined_inflation_metrics = 'combined_inflation_metrics.csv'
df_combined_inflation_metrics = pd.read_csv(combined_inflation_metrics)
combined_source = ColumnDataSource(df_combined_inflation_metrics)
l.multi_line(xs=['Date','Date','Date'],ys=['RPI', 'CPI', 'CPIH'], source=combined_source)
#l.multi_line(xs=[['Date'],['Date'],['Date']],ys=[['RPI'], ['CPI'], ['CPIH']], source=combined_source)
show(l)
但是,这会引发以下问题:
^{pr2}$但我不太清楚为什么会这样?在
更新:
我通过在每个数据源中添加所有值找到了一个解决方法。它是有效的,但感觉不是最有效的,而且仍然想知道如何正确地进行这项工作。在
编辑代码请求:
from bokeh.plotting import figure, output_file, show
from bokeh.models import NumeralTickFormatter, DatetimeTickFormatter, ColumnDataSource, HoverTool, CrosshairTool, SaveTool, PanTool
import pandas as pd
import os
os.chdir(r'path')
#output_file('Inflation.html', title='Inflation')
RPI = 'RPI.csv'
CPI = 'CPI.csv'
CPIH = 'CPIH.csv'
df_RPI = pd.read_csv(RPI)
df_CPI = pd.read_csv(CPI)
df_CPIH = pd.read_csv(CPIH)
def to_date_time(data_frame, data_series):
data_frame[data_series] = data_frame[data_series].astype('datetime64[ns]')
to_date_time(df_RPI, 'Date')
to_date_time(df_CPI, 'Date')
to_date_time(df_CPIH, 'Date')
RPI_source = ColumnDataSource(df_RPI)
CPI_source = ColumnDataSource(df_CPI)
CPIH_source = ColumnDataSource(df_CPIH)
l = figure(title="Historic Inflaiton Metrics", logo=None)
l.plot_width = 1200
l.xaxis[0].formatter=DatetimeTickFormatter(
days=["%d %B %Y"],
months=["%d %B %Y"],
years=["%d %B %Y"],
)
glyph_1 = l.line('Date','RPI',source=RPI_source, legend='TYPE', color='red')
glyph_2 = l.line('Date','CPI',source=CPI_source, legend='TYPE', color='blue')
glyph_3 = l.line('Date','CPIH',source=CPIH_source, legend='TYPE', color='gold')
hover = HoverTool(renderers=[glyph_1],
tooltips=[ ("Date","@Date{%F}"),
("RPI","@RPI"),
("CPI","@CPI"),
("CPIH","@CPIH")],
formatters={"Date": "datetime"},
mode='vline'
)
l.tools = [SaveTool(), PanTool(), hover, CrosshairTool()]
show(l)
悬停工具查找要显示在ColumnDataSource中的数据。因为您为每一行创建了一个新的ColumnDataSource,并将hover工具限制为line1,因此它只能在数据源中查找数据。在
一般的解决方案是只创建一个ColumnDataSource并在每行中重用它:
当然,只有当所有的数据帧都可以合并成一个,即测量时间点是相同的,这才是可能的。如果他们不是除了重采样/插值,我不知道一个好的方法来做你想做的。在
相关问题 更多 >
编程相关推荐