Я хочу добавить два значения оси Y в график линии боке

что не так с этой строкой кода .. пожалуйста, помогите

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

Трудно решить проблему, если мы не можем воспроизвести ваш пример. У нас нет вашего файла excel. Пожалуйста, предоставьте свой DataFrame и сообщение об ошибке (также из консоли браузера).

mosc9575 18.11.2022 10:05

Я подозреваю, что ошибка в этой строке кода "p.line(x= 'KP [km]', y = [['DOL [m]'], ['DOC [m]']], source = SOURCE )" . Здесь KP [км], DOL [м] и DOC [м] — имена столбцов из excel. Я хочу построить два значения столбца по оси Y

Aarzoo syed 18.11.2022 10:19

ошибка консоли - bokeh-2.4.2.min.js:183 [bokeh] попытался получить массив свойств для несуществующего поля «КП [км]»

Aarzoo syed 18.11.2022 10:27

Ошибка в консоли означает, что объект ColumnDataSource не может найти запись с именем 'KP [km]'. Пожалуйста, проверьте имена столбцов вашего DataFrame, используя print(df.columns). Пожалуйста, также добавьте print(df.head()) к вашему вопросу. Таким образом, можно увидеть структуру вашего DataFrame.

mosc9575 18.11.2022 10:36
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
0
4
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы используете 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() для каждой строки помогло... спасибо, что нашли время

Aarzoo syed 18.11.2022 10:47

Другие вопросы по теме

Сравните 2 столбца списка в фрейме данных pandas. Удалить значение из одного списка, если оно присутствует в другом
Как элегантно переименовать выходные данные Pandas?
Как изменить цвет точек данных на точечной диаграмме в соответствии с возрастным диапазоном?
Изменить порядок значений в фрейме данных на основе условия в Pandas
Np.where изменить значение в столбце, если другое значение столбца находится в другом столбце фрейма данных
Отслеживание претензий с использованием столбцов даты/времени и создание окончательного подсчета с помощью панд
Заменить вложенные циклы for в сочетании с условиями для повышения производительности
NotImplementedError: создание глубокой копии выражения CVXPY не поддерживается. Вместо этого используйте .copy()
Выбор столбцов на основе символов в именах столбцов
Минимизация строк с помощью слияния/сквоша в Pandas DataFrame с несколькими индексами