что не так с этой строкой кода .. пожалуйста, помогите
import pandas as pd
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, show, output_file
output_file ('newfile.html')
data = pd.read_excel(r'C:\Users\ASyed\OneDrive - NKT\PythonProject\bokehPractise\newfile\19AJ100429-GC3-FR-003-A1-KP240.000-KP248.831-SL-AT.xlsx', \
sheet_name= 'Listing')
df = pd.DataFrame(data)
df.columns = [x.replace("\n", " ") for x in df.columns.to_list()]
SOURCE = ColumnDataSource(data = df)
p = figure (plot_width = 800, plot_height = 600)
p.line(x= 'KP [km]', y =[['DOL [m]'], ['DOC [m]']], source = SOURCE )
p.title.text = 'DOL Visualization'
p.xaxis.axis_label = 'Kilometer Point'
p.yaxis.axis_label = 'DOC'
show(p)
Я использую панды и боке. Мне нужен график с двумя линиями оси Y, полученными из двух разных столбцов. Вышеприведенный код дает следующую ошибку и график доски боке в html.
Expected y to reference fields in the supplied data source.
When a 'source' argument is passed to a glyph method, values that are sequences
(like lists or arrays) must come from references to data columns in the source.
For instance, as an example:
source = ColumnDataSource(data=dict(x=a_list, y=an_array))
p.circle(x='x', y='y', source=source, ...) # pass column names and a source
Alternatively, *all* data sequences may be provided as literals as long as a
source is *not* provided:
p.circle(x=a_list, y=an_array, ...) # pass actual sequences and no source
Я подозреваю, что ошибка в этой строке кода "p.line(x= 'KP [km]', y = [['DOL [m]'], ['DOC [m]']], source = SOURCE )" . Здесь KP [км], DOL [м] и DOC [м] — имена столбцов из excel. Я хочу построить два значения столбца по оси Y
ошибка консоли - bokeh-2.4.2.min.js:183 [bokeh] попытался получить массив свойств для несуществующего поля «КП [км]»
Ошибка в консоли означает, что объект ColumnDataSource
не может найти запись с именем 'KP [km]'
. Пожалуйста, проверьте имена столбцов вашего DataFrame, используя print(df.columns)
. Пожалуйста, также добавьте print(df.head())
к вашему вопросу. Таким образом, можно увидеть структуру вашего DataFrame.
Когда вы используете source
в качестве входных данных для своей фигуры, вам разрешено добавлять строки только в качестве указателя на данные.
В вашем случае используйте
p.line(x= 'KP [km]', y ='DOL [m]', source = SOURCE )
вместо того
p.line(x= 'KP [km]', y =[['DOL [m]'], ['DOC [m]']], source = SOURCE )
Если вы хотите добавить несколько строк к одной фигуре, вызовите p.line()
один раз для каждой строки.
import pandas as pd
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource
output_notebook()
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
source = ColumnDataSource(df)
p = figure(width=300, height=300)
p.line(x='index', y='a', source=source)
p.line(x='index', y='b', source=source, color='red')
show(p)
Посмотрите многострочный пример в официальной документации.
Спасибо!!! добавление отдельного p.line() для каждой строки помогло... спасибо, что нашли время
Трудно решить проблему, если мы не можем воспроизвести ваш пример. У нас нет вашего файла excel. Пожалуйста, предоставьте свой DataFrame и сообщение об ошибке (также из консоли браузера).