Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Bokeh-Tick标签_Python_Datetime_Labels_Bokeh_Ticker - Fatal编程技术网

Python-Bokeh-Tick标签

Python-Bokeh-Tick标签,python,datetime,labels,bokeh,ticker,Python,Datetime,Labels,Bokeh,Ticker,我是bokeh的新手,正在尝试用直线图绘制股票数据 X轴应为日期,y轴为股票收盘价 下面是我的代码示例: data = pd.DataFrame({'Symbol' : ['AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD',], 'Previous_Close' : [10,20,30,10,

我是bokeh的新手,正在尝试用直线图绘制股票数据 X轴应为日期,y轴为股票收盘价

下面是我的代码示例:

data = pd.DataFrame({'Symbol' : ['AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD',],
                     'Previous_Close' : [10,20,30,10,20,30,10,20,30,10,20,30,10,20,30,10,20,30,],
                     'Date' : pd.to_datetime(['01/01/16', '01/01/16', '01/01/16', '01/02/16', '01/02/16', '01/02/16', '01/03/16', '01/03/16', '01/03/16', '01/04/16',
                                            '01/04/16', '01/04/16', '01/05/16', '01/05/16', '01/05/16', '01/06/16', '01/06/16', '01/06/16'], format = '%m/%d/%y')})
Symbols = [sym for sym in data.Symbol.unique()]
Dates = [date for date in data.Date.unique()]
format_dates = [date.strftime('%b%d_%y') for date in dates]
colors = ['Darkred', 'Orange', 'Navy']

output_notebook()

TOOLS = ['hover','pan','box_zoom','resize', 'save', 'reset']
# CREATE FIGURE
p = figure(width = 800, height = 600, tools = TOOLS)

cnum = 0
# PLOT
for sym in Symbols:
    # plot stock closing price
    p.line(range(len(dates)), data[data.Symbol==sym].Previous_Close, color = colors[cnum])
    # add stock symbol as text label to end of line
    p.text(len(Symbols), data[data.Symbol==sym].Previous_Close.iloc[-1], [sym],
           text_color = colors[cnum], text_font_size = '10pt')
    cnum +=1
show(p)
显然,数据是在这里编造的,但想法是一样的。我只想将x记号标签设置为格式化的日期名称。在Pyplot中,我只需执行以下操作:

ax.set_xticklables(format_dates)
axis()
我已经尝试将x_axis_类型设置为“datetime”,但这只会给我毫秒的时间。我尝试过使用DateTimeFormatter(),但要么我不了解如何使用它,要么它不起作用(可能是前者)

我尝试过的事情(重新回答): 这会将x轴更改为毫秒: p=图形(宽度=800,高度=600,x轴类型=datetime',工具=tools)

这将x刻度从1970年更改为数十年: p=图形(宽度=800,高度=600,x轴类型=datetime',工具=tools)

使用:


看来你的熊猫正在制造麻烦。我认为这个代码应该有效:

import numpy as np
import pandas as pd
from bokeh.plotting import figure, output_file, show

data = pd.DataFrame({'Symbol' : ['AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD',],
                     'Previous_Close' : [10,20,30,10,20,30,10,20,30,10,20,30,10,20,30,10,20,30,],
                     'Date' : pd.to_datetime(['01/01/16', '01/01/16', '01/01/16', '01/02/16', '01/02/16', '01/02/16', '01/03/16', '01/03/16', '01/03/16', '01/04/16', '01/04/16', '01/04/16', '01/05/16', '01/05/16', '01/05/16', '01/06/16', '01/06/16', '01/06/16'], format = '%m/%d/%y')})

symbols = [sym for sym in data.Symbol.unique()]
dates = [date for date in data.Date.unique()]
dates.sort()
lastDate = dates[-1]
colors = ['Darkred', 'Orange', 'Navy']

output_notebook()

TOOLS = ['hover','pan','box_zoom','resize', 'save', 'reset']
# CREATE FIGURE
p = figure(width = 800, height = 600, tools = TOOLS, x_axis_type="datetime")

# PLOT
for cnum, sym in enumerate(symbols):
    # plot stock closing price
    p.line(data[data.Symbol==sym].Date.values, data[data.Symbol==sym].Previous_Close.values, color = colors[cnum])

p.text(data[data.Date==lastDate].Date.values, data[data.Date==lastDate].Previous_Close.values, data[data.Date==lastDate].Symbol.values, text_color = colors, text_font_size = '10pt')

show(p)
这是输出的样子:

执行此操作时(不更改直线的x参数),它会将x轴设置为毫秒。当我将x参数更改为日期(即datetime对象列表)时,它将x刻度从epochGreat更改为数十年,这(大部分)是有效的!现在我只需要找出如何调整轴上显示的刻度的数量,但我将查找它,或者在stackoflow中发布一个新问题。我的一个问题是,是否有一种方法可以获得x轴值或x记号标签值等的列表。。。例如,在matplotlib中,我可以通过
plt.axis()
获取轴范围,通过
ax.get_xticklabels()
获取刻度标签列表。有没有类似的博克语?嗯,我只是在自学博克语,所以我不确定有没有简单的等效语。我认为获取勾号标签会很困难,因为这是在javascript中完成的,并且可以由用户交互更改。但要设置可以使用的刻度数,例如,示例代码中的p.yaxis[0].ticker.desired_num_ticks=20。
cnum = 0
# PLOT
for sym in Symbols:
    # CHANGE X ARG TO DATETIME DATES
    p.line(dates, data[data.Symbol==sym].Previous_Close, color = colors[cnum])
p = figure(width = 800, height = 600, x_axis_type='datetime', tools = TOOLS)
import numpy as np
import pandas as pd
from bokeh.plotting import figure, output_file, show

data = pd.DataFrame({'Symbol' : ['AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD','AMBA','FB','WWD',],
                     'Previous_Close' : [10,20,30,10,20,30,10,20,30,10,20,30,10,20,30,10,20,30,],
                     'Date' : pd.to_datetime(['01/01/16', '01/01/16', '01/01/16', '01/02/16', '01/02/16', '01/02/16', '01/03/16', '01/03/16', '01/03/16', '01/04/16', '01/04/16', '01/04/16', '01/05/16', '01/05/16', '01/05/16', '01/06/16', '01/06/16', '01/06/16'], format = '%m/%d/%y')})

symbols = [sym for sym in data.Symbol.unique()]
dates = [date for date in data.Date.unique()]
dates.sort()
lastDate = dates[-1]
colors = ['Darkred', 'Orange', 'Navy']

output_notebook()

TOOLS = ['hover','pan','box_zoom','resize', 'save', 'reset']
# CREATE FIGURE
p = figure(width = 800, height = 600, tools = TOOLS, x_axis_type="datetime")

# PLOT
for cnum, sym in enumerate(symbols):
    # plot stock closing price
    p.line(data[data.Symbol==sym].Date.values, data[data.Symbol==sym].Previous_Close.values, color = colors[cnum])

p.text(data[data.Date==lastDate].Date.values, data[data.Date==lastDate].Previous_Close.values, data[data.Date==lastDate].Symbol.values, text_color = colors, text_font_size = '10pt')

show(p)