Мое боке может работать нормально, но выводит пустую диаграмму. Что я делаю не так?

#pandas #dataframe #csv #bokeh

#pandas #фрейм данных #csv #боке

Вопрос:

Я пытаюсь запустить какой-то простой код, который считывает CSV-файл и запускает данные, чтобы отобразить выходные данные в виде линейного графика. Запрос выполняется нормально и выдает приведенный ниже результат, но по какой-то причине он показывает очень странный формат даты по оси x, что приводит к очень странной строке с несколькими выбросами (на самом деле это не так). Кто-нибудь может помочь?

Дата, значение 01/11/2020,4.5202 01/12/2020,4.6555 01/01/2021,4.7194 01/02/2021,4.7317 01/03/2021,4.6655 01/04/2021,4.4641 01/05/2021,4.3875 01/06/2021,4.3560 01/07/2021,4.3318 01/08/2021,4.3607 01/09/2021,4.4853 01/10/2021,4.6456 01/11/2021,5.2262 01/12/2021,5.3259 01/01/2022,5.3820 01/02/2022,5.3855 01/03/2022,5.2673 01/04/2022,4.9346 01/05/2022,4.728701/06/2022,4.6274 01/07/2022,4.6632 01/08/2022,4.6929 01/09/2022,4.7841 01/10/2022,4.9572 01/11/2022,5.4293 01/12/2022,5.5214 01/01/2023,5.5697 01/02/2023,5.5738 01/03/2023,5.4550 01/04/2023,5.1962 01/05/2023,4.9534 01/06/2023,4.8514 01/07/2023,4.8112 01/08/2023,4.8415 01/09/2023,4.9338 01/10/2023,5.1461 01/11/2023,5.6022 01/12/2023,5.6960 01/01/2024,5.745101/02/2024,5.7499 01/03/2024,5.6308 01/04/2024,5.2752 01/05/2024,5.0306 01/06/2024,4.9282 01/07/2024,4.8877 01/08/2024,4.9188 01/09/2024,5.0127 01/10/2024,5.2100 01/11/2024,5.6716 01/12/2024,5.7669 01/01/2025,5.8176 01/02/2025,5.8229 01/03/2025,5.7031 01/04/2025,5.2633 01/05/2025,5.0164 01/06/2025,4.9133 01/07/2025,4.8730 01/08/2025,4.9053 01/09/2025,5.000501/10/2025,5.3274 01/11/2025,5.6325 01/12/2025,5.7293

Ожидаемый результат диаграммы

Выходной график

 import pandas as pd

# Read in the CSV file: df
df = pd.read_csv('TTFcurve.csv', parse_dates=['Date'])

# Import figure from bokeh.plotting
from bokeh.plotting import figure, output_file, show

output_file("lines.html")
# Create the figure: p
#x = df.Date
#y = df.Value
p = figure(x_axis_label='Date', y_axis_label='Value')

# Plot mpg vs hp by color
p.line(df['Date'], df['Value'], line_color="red")


# Specify the name of the output file and show the result
show(p)
  

Ответ №1:

Вы должны сообщить Bokeh, что ваша ось X datetime :

 p = figure(..., x_axis_type='datetime')
  

Что касается выбросов — проверьте данные. Я почти уверен, что Bokeh не может «изобрести» какие-либо новые точки здесь. Если вы убедитесь, что ваши данные в полном порядке, пожалуйста, опубликуйте их, чтобы приведенный выше график можно было воспроизвести и проверить.

Комментарии:

1. Спасибо, Евгений, вы хотите добавить данные в виде текста или изображения выше? Поскольку я не могу прикрепить файл Excel. Я добавил изображение того, что я ожидаю, создав данные на диаграмме в Excel.

2. Вы можете прикрепить его в виде текста CSV — никогда не используйте изображения для данных. Если данные слишком большие, просто загрузите их куда-нибудь (например, в Pastebin) и добавьте ссылку на вопрос.

3. Конечно, спасибо, я сделал это сейчас. Может быть, мне нужно интерполировать данные?

4. А, я понимаю, в чем проблема. Pandas анализирует ваши даты как %m/%d/%Y , но я думаю , вам нужно %d/%m/%Y . Используйте pd.to_datetime функцию с правильным форматом вместо parse_dates параметра: data['Date'] = pd.to_datetime(data['Date'], format='%d/%m/%Y')