Интерактивная диаграмма разброса данных в отдельном скрипте (без Jupyter) - PullRequest
0 голосов
/ 04 июня 2019

TL / DR: что я пытаюсь сделать:

  1. Использовать фрейм данных (большой существующий набор данных в df)
  2. Запускать как отдельный скрипт (без jupyter)
  3. Уметь легко взаимодействовать / исследовать данные
  4. Простой, но полный пример (видно множество фрагментов кода, которые в итоге не работают)

В прошлом я былвсе в порядке с dataframe, matplotlib и tkinter, но я начинаю поражать стену производительности своим размером набора данных.Кажется, что со всем вниманием к анализу данных и библиотекам в последнее время я подумал, что смогу сделать вещи более современными и улучшить интерактивность с меньшим количеством кода.Часть проблемы, кажется, состоит в том, что слишком много способов сделать что-то, что неясно, каковы текущие / лучшие практики или даже как все это сделать.

Я думал, что был очень близок к примеру с Bokeh, но потом обнаружил, что Scatter больше не является частью модуля bokeh.plotting или bokeh.charts и был разбит на проект bkcharts.Нет, он был перемещен в holoviews или это holoplot или hvplot ... Давайте углубимся в это, хорошо, может быть, он был перенесен в PyViz, но использует hvplot с боке backend.Я так запутался со всеми библиотеками и инструментами, в которых вращается моя голова.

Я был бы очень признателен, если бы кто-нибудь показал мне простой (но полный) пример с вышеуказанными требованиями?

Здесьэто OLD значительно упрощенный пример с использованием matplotlib и dataframes (для простоты удален интерактивный материал tkinter):

import matplotlib.pyplot as plt
from io import StringIO
import pandas as pd

data_ssv = """tone_amp_0  tone_freq_0     SNR
75.303        628.0  68.374
84.902       8000.0  61.292
92.856        288.0  70.545
70.000       2093.0  35.036
76.511       6834.0  66.952 """

data = pd.read_table(StringIO(data_ssv), sep="\s+", header=0)

x_points=data.loc[:, ['tone_amp_0']]
y_points=data.loc[:, ['SNR']]
z_points=data.loc[:, ['tone_freq_0']]

fig = plt.figure()
ax = plt.axes()

ax.scatter(x_points, y_points, c=z_points, cmap='hsv');

plt.show()

ОБНОВЛЕНИЕ:

Этоближе всего я зашел так далеко, но данные не строятся:

import pandas as pd
from bokeh.plotting import figure
from bokeh.io import output_file,show
from io import StringIO

data_ssv = """tone_amp_0  tone_freq_0     SNR
75.303        628.0  68.374
84.902       8000.0  61.292
92.856        288.0  70.545
70.000       2093.0  35.036
76.511       6834.0  66.952 """

data = pd.read_table(StringIO(data_ssv), sep="\s+", header=0)

p = figure(x_axis_label='tone_amp_0', y_axis_label='SNR')

p.circle(x=data.loc[:, ['tone_amp_0']], y=data.loc[:, ['SNR']])

output_file("basic_interactive_plot.py.html")

show(p)

...