#python #data-visualization #holoviews #datashader
#python #визуализация данных #holoviews #datashader
Вопрос:
Я хотел бы построить фрейм данных временных рядов с 3 столбцами, по одному для каждой кривой. Я бы хотел, чтобы каждая кривая имела свой собственный цвет, а также отображала легенду, как hvplot()
и по умолчанию.
Вот автономный пример:
import numpy as np
import pandas as pd
import hvplot.pandas
import datetime
from holoviews.operation.datashader import datashade
n=1000
start = datetime.datetime(2010, 10, 1, 0) # Start time
datetimerange = [start datetime.timedelta(minutes=1)*i for i in range(n)]
A = np.random.randint(5, size=n)
B = np.random.randint(20, 40, size=n)
C = np.random.randint(10, 20, size=n)
d = {'datetime': datetimerange, 'A': A, 'B': B, 'C': C}
df = pd.DataFrame(d).set_index('datetime')
df.hvplot(cmap=['red', 'blue', 'green']) datashade(df.hvplot(cmap=['red', 'blue', 'green']))
Вот результат (без datashader слева, с datashader справа):
При передаче графика в datashader цвета и легенда теряются. Использование datashade=True
аргумента of hvplot
дает тот же результат.
В документации Datashader есть руководство по построению временных рядов, но оно довольно сложное, оно используется datashader.transfer_functions.shade()
в качестве основы для управления графиками без особого представления о том, как это работает, и API не намного понятнее. Я просто хотел бы сохранить эти основные функции графика, которые bokeh / hvplot предоставляет по умолчанию, я не уверен, почему datashader их не сохраняет, поэтому я не знаю, что исправить.
Как я могу подать сигнал datashader, чтобы сохранить разные цвета и построить легенду?
Комментарии:
1. возможно, вы также можете задать вопрос о discourse.holoviz.org Здесь разработчики пакета также отвечают на вопросы. Если у них есть лучший ответ, можете ли вы также опубликовать его здесь? Мне тоже любопытно 🙂
Ответ №1:
Вот половина ответа, к сожалению, это не дает легенды. Пожалуйста, обратите внимание, что .hvplot()
аргумент datashade=True
встроен:
df.reset_index().melt(id_vars='datetime').hvplot.line(
x='datetime',
y='value',
by='variable',
datashade=True,
dynamic=False,
)
Комментарии:
1. Это решение hvplot не окрашивает группы по-разному. Это ошибка или неправильное использование аргументов hvplot?
2. @fmfreeze: я написал, что дал половину ответа, поэтому я не знал, как это решить. Но лучший ответ на этот вопрос можно найти здесь: discourse.holoviz.org/t /…
3. @SandervandenOord Спасибо вам большое, очень большое! Я принял ваш ответ в качестве ссылки на ваш комментарий к полному ответу, не могли бы вы добавить его в качестве дополнения к вашему ответу, пожалуйста?