2016-03-17 6 views
2

Я новичок в боке и пытаюсь построить данные о запасах в линейном графике Ось X должна быть датой, а ось Y будет Закрывать Цена акции.Python Bokeh Тик-лейблы

Вот пример моего кода:

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 tick на имена форматированных дат. В Pyplot я бы просто сделать:

ax.set_xticklables(format_dates) 
axis() 

Я попытался установить x_axis_type к «DateTime», но это только дает мне миллисекунды. Я пробовал использовать DateTimeFormatter(), но либо я не понимаю, как его использовать, либо он не работает (возможно, первый).

вещи, я попытался (RE ОТВЕТ):

Это меняет ось й в миллисекунды: р = фигура (ширина = 800, высота = 600, x_axis_type = 'DateTime', инструменты = инструменты)

cnum = 0 
# PLOT 
for sym in Symbols: 
    # NO CHANGE TO X ARG 
    p.line(range(len(dates)), data[data.Symbol==sym].Previous_Close, color = colors[cnum]) 

Это изменяет х клещей до десятилетий с 1970: р = цифра (ширина = 800, высота = 600, x_axis_type = 'DateTime', инструменты = ИНСТРУМЕНТ)

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]) 

ответ

1

Похоже, что индексирование ваших панд вызывает проблемы. Я думаю, что этот код должен работать:

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) 

Это то, что результат выглядит: example using dates in an axis

+0

Отлично работает (в основном)! Теперь мне просто нужно выяснить, как настроить количество тиков, показанных на оси, но я посмотрю, что вставил или разместил новый вопрос в stackoflow. Мой единственный вопрос, хотя есть способ получить список значений оси x или значений метки метки x и т. Д. ... например, в matplotlib я мог бы пойти 'plt.axis()', чтобы получить диапазоны осей, и 'ax .get_xticklabels() ', чтобы получить список меток тиков. Любой эквивалент боке? – RSHAP

+1

Хм, я просто изучаю сам боке, поэтому я не уверен, что есть простой эквивалент. Я думаю, что получение ярлыков меток будет сложно, потому что это делается в javascript и может быть изменено пользователем пользователем. Но просто установите количество тиков, которые вы можете использовать, например, 'p.yaxis [0] .ticker.desired_num_ticks = 20' в примере кода. – Peter

1

:

p = figure(width = 800, height = 600, x_axis_type='datetime', tools = TOOLS) 
+0

когда я делаю это (без изменения х параметров линии) задает ось х до миллисекунды. Когда я меняю x arg на даты (т.е. список объектов datetime), он меняет x-тики на десятилетия с эпохи – RSHAP

+0

. спасибо – Sift

Смежные вопросы