2015-07-20 5 views
12

के साथ कई लाइनों को प्लॉट करना मैं कई लाइनों के साथ लाइन चार्ट प्लॉट करने के लिए बोके को एक पांडा डेटाफ्रेम देना चाहता हूं। एक्स-अक्ष df.index होना चाहिए और प्रत्येक df.columns एक अलग पंक्ति होना चाहिए।बोके और पांडा

यह मैं करना चाहता हूँ wouuld क्या है:

RuntimeError: Missing required glyph parameters: ys 

इसके बजाय, Ive ऐसा करने में कामयाब रहे:

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

toy_df = pd.DataFrame(data=np.random.rand(5,3), columns = ('a', 'b' ,'c'), index = pd.DatetimeIndex(start='01-01-2015',periods=5, freq='d')) 

p = figure(width=1200, height=900, x_axis_type="datetime") 
p.multi_line(df) 
show(p) 

हालांकि, मैं त्रुटि मिलती है

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

toy_df = pd.DataFrame(data=np.random.rand(5,3), columns = ('a', 'b' ,'c'), index = pd.DatetimeIndex(start='01-01-2015',periods=5, freq='d')) 

ts_list_of_list = [] 
for i in range(0,len(toy_df.columns)): 
    ts_list_of_list.append(toy_df.index) 

vals_list_of_list = toy_df.values.T.tolist() 

p = figure(width=1200, height=900, x_axis_type="datetime") 
p.multi_line(ts_list_of_list, vals_list_of_list) 
show(p) 

कि (अनजाने में) नौकरी करता है लेकिन यह सभी 3 लाइनों के लिए एक ही रंग का उपयोग करता है, नीचे देखें: enter image description here

सवाल:

1) कैसे मैं एक पांडा dataframe पारित कर सकते हैं Bokeh करने के multi_line?

2) यदि नहीं संभव सीधे, मैं कैसे dataframe डेटा में हेरफेर कर सकते हैं ताकि multi_line एक अलग रंग के साथ प्रत्येक पंक्ति पैदा करेगा?

धन्यवाद अग्रिम

उत्तर

19

में आप रंग multi_line करने की एक सूची प्रदान की जरूरत है। अपने उदाहरण में, आप इस तरह करना होगा, कुछ:

p.multi_line(ts_list_of_list, vals_list_of_list, line_color=['red', 'green', 'blue']) 

यहाँ अपने दूसरे उदाहरण है कि कम या ज्यादा क्या आप के साथ समाप्त हो गया होता है की एक अधिक सामान्य उद्देश्य संशोधन है, लेकिन एक छोटे से अधिक संक्षिप्त है और शायद अधिक pythonic :

import pandas as pd 
import numpy as np 
from bokeh.palettes import Spectral11 
from bokeh.plotting import figure, show, output_file 
output_file('temp.html') 

toy_df = pd.DataFrame(data=np.random.rand(5,3), columns = ('a', 'b' ,'c'), index = pd.DatetimeIndex(start='01-01-2015',periods=5, freq='d')) 

numlines=len(toy_df.columns) 
mypalette=Spectral11[0:numlines] 

p = figure(width=500, height=300, x_axis_type="datetime") 
p.multi_line(xs=[toy_df.index.values]*numlines, 
       ys=[toy_df[name].values for name in toy_df], 
       line_color=mypalette, 
       line_width=5) 
show(p) 

पैदावार जो:

multi_line plot

+2

नोट एक dataframe के स्तंभों की साजिश रचने के लिए multi_line का उपयोग करने का एक गंभीर दोष यह है कि यह आसानी से स्तंभों में से प्रत्येक के लिए एक किंवदंती प्रविष्टि जोड़ने के लिए संभव है कि: कृपया निम्न उदाहरण यहाँ स्थित देखते हैं। [यह क्यू एंड ए] देखें (http://stackoverflow.com/questions/31419388/bokeh-how-to-add-legend-to-figure-created-by-multi-line-method) – jhin

+0

क्या होवर जोड़ना संभव है इस तरह के एक आंकड़े के लिए उपकरण? –

+0

@ निकोलगोबेल: यह उपयोग में हो सकता है: http://stackoverflow.com/questions/31496628/in-bokeh-how-do-i-add-tooltips-to-a-timeseries-chart-hover-tool – bs123

1

आप एक समय श्रृंखला चार्ट प्लॉट करने के लिए की जरूरत है। यह आपको आसानी से एक किंवदंती डालने की अनुमति देगा। टाइमसाइरीज विशेषता bokeh._legacy_charts के अंतर्गत स्थित हो सकती है।

http://bokeh.pydata.org/en/0.9.3/docs/user_guide/charts.html

+0

अच्छा देखें कि बोके और उसके दस्तावेज में उपलब्ध दोनों चार्ट विकसित हो रहे हैं! मैं जल्द ही एक और नजर लेने की योजना बना रहा हूं। – bs123

संबंधित मुद्दे