Python 在波基,奇怪的日期轴问题

Python 在波基,奇怪的日期轴问题,python,python-3.x,pandas,plot,bokeh,Python,Python 3.x,Pandas,Plot,Bokeh,我正试图通过熊猫与博克绘制一些数据。x轴是日期,我可以让Bokeh绘制“大部分”正确的轴(范围可能关闭)。然而,它输出的线路到处都是 例如: 看起来可能是一条大的,连续的线 这是我的密码: # library imports import pandas as pd from bokeh.io import output_file, show, vform from bokeh.plotting import figure, output_file, ColumnDataSource, sho

我正试图通过熊猫与博克绘制一些数据。x轴是日期,我可以让Bokeh绘制“大部分”正确的轴(范围可能关闭)。然而,它输出的线路到处都是

例如:

看起来可能是一条大的,连续的线

这是我的密码:

# library imports

import pandas as pd
from bokeh.io import output_file, show, vform
from bokeh.plotting import figure, output_file, ColumnDataSource, show
from bokeh.models import HoverTool, BoxAnnotation, BoxSelectTool, BoxZoomTool, WheelZoomTool, ResetTool

# Import csv into pandas dataframe

df = pd.read_csv(r"C:\Users\paul.shapiro\Documents\kwdata.csv", parse_dates=['Interest over time_time'])
df.rename(columns={'Search Term': 'keyword', 'Interest over time_time': 'date', 'Weekly Volume': 'volume'}, inplace=True)

source = ColumnDataSource(data=dict(x=df['date'], y=df['volume'], desc=df['keyword']))
TOOLS = [HoverTool(tooltips=[("Keyword", "@desc"),("Date", "@x"),("Search Volume", "@y")]), BoxZoomTool(), WheelZoomTool(), ResetTool()]

# Output html for embedding
output_file("line.html")

p = figure(plot_width=800, plot_height=800, tools=TOOLS, x_axis_type="datetime")

# add both a line and circles on the same plot
p.line(df['date'], df['volume'], line_width=2, color=df['keyword'], source=source)
p.circle(df['date'], df['volume'], fill_color="white", size=8, source=source)

show(p)
值得注意的是,如果您使用bokeh.charts打印它(如果我这样做了,工具提示将不起作用,因此它不是一个选项),那么它可以很好地打印:

任何帮助都将不胜感激。这让我快发疯了


使用multi_line()和for循环求解

import pandas as pd
from bokeh.io import output_file, show, vform
from bokeh.plotting import figure, output_file, ColumnDataSource, show
from bokeh.models import HoverTool, BoxAnnotation, BoxSelectTool, BoxZoomTool, WheelZoomTool, ResetTool

df = pd.read_csv(r"C:\Users\paul.shapiro\Documents\kwdata.csv", parse_dates=['Interest over time_time'])
df.rename(columns={'Search Term': 'keyword', 'Interest over time_time': 'date', 'Weekly Volume': 'volume'}, inplace=True)

gp = df.groupby('volume')

source = ColumnDataSource(data=dict(x=df['date'], y=df['volume'], desc=df['keyword']))
TOOLS = [HoverTool(tooltips=[("Keyword", "@desc"),("Date", "@x"),("Search Volume", "@y")]), BoxZoomTool(), WheelZoomTool(), ResetTool()]

p = figure(plot_width=800, plot_height=800, tools=TOOLS, x_axis_type="datetime")

gp = df.groupby('keyword')
# groups() returns a dict with 'Gene':indices as k:v pair
for g in gp.groups.items():
    p.multi_line(xs=[df.loc[g[1], 'date']], ys=[df.loc[g[1], 'volume']])

p.circle(df['date'], df['volume'], fill_color="white", size=8, source=source)

output_file("newline.html")
show(p)

我看不出你的代码有什么问题。尝试查看dataframe df与bokeh示例中的简单嵌套值列表有多大不同。也许通过对数据帧进行一些操作,您可以使其正常工作

import pandas as pd
from bokeh.io import output_file, show, vform
from bokeh.plotting import figure, output_file, ColumnDataSource, show
from bokeh.models import HoverTool, BoxAnnotation, BoxSelectTool, BoxZoomTool, WheelZoomTool, ResetTool

df = pd.read_csv(r"C:\Users\paul.shapiro\Documents\kwdata.csv", parse_dates=['Interest over time_time'])
df.rename(columns={'Search Term': 'keyword', 'Interest over time_time': 'date', 'Weekly Volume': 'volume'}, inplace=True)

gp = df.groupby('volume')

source = ColumnDataSource(data=dict(x=df['date'], y=df['volume'], desc=df['keyword']))
TOOLS = [HoverTool(tooltips=[("Keyword", "@desc"),("Date", "@x"),("Search Volume", "@y")]), BoxZoomTool(), WheelZoomTool(), ResetTool()]

p = figure(plot_width=800, plot_height=800, tools=TOOLS, x_axis_type="datetime")

gp = df.groupby('keyword')
# groups() returns a dict with 'Gene':indices as k:v pair
for g in gp.groups.items():
    p.multi_line(xs=[df.loc[g[1], 'date']], ys=[df.loc[g[1], 'volume']])

p.circle(df['date'], df['volume'], fill_color="white", size=8, source=source)

output_file("newline.html")
show(p)
from bokeh.plotting import figure, output_file, show

p = figure(plot_width=300, plot_height=300)
p.multi_line(xs=[[1, 2, 3], [2, 3, 4]], ys=[[6, 7, 2], [4, 5, 7]],
         color=['red','green'])

show(p)