Сюжетные темы с bokeh или matplotlib

Я пытаюсь построить визуализацию темы из модели. Я хочу сделать что-то вроде кочарификации боке.

Мои данные:

data 1: index, topics. data 2: index, topics, weights(use it for color). 

где тема – это просто набор слов.

Как я могу предоставить данные боке для построения вышеуказанных данных? В этом примере обработка данных не является интуитивной.

С matplot это выглядит так.
Очевидно, что визуально не полезно видеть, какая тема соответствует каждому кругу. Вот мой код matplotlib:

 x = [] y = [] area = [] for row in joined: x.append(row['index']) y.append(row['index']) #weight.append(row['score']) area.append(np.pi * (15 * row['score'])**2) scale_values = 1000 plt.scatter(x, y, s=scale_values*np.array(area), alpha=0.5) plt.show() 

Любая идея / предложения?

One Solution collect form web for “Сюжетные темы с bokeh или matplotlib”

ОБНОВЛЕНИЕ : ответ ниже по-прежнему правилен во всех основных моментах, но API немного изменился, чтобы быть более явным, как и у Bokeh 0.7. В общем, такие вещи, как:

 rect(...) 

следует заменить на

 p = figure(...) p.rect(...) 

Вот соответствующие строки из примеров Les Mis, упрощенные для вашего случая. Давайте взглянем:

 # A "ColumnDataSource" is like a dict, it maps names to columns of data. # These names are not special we can call the columns whatever we like. source = ColumnDataSource( data=dict( x = [row['name'] for row in joined], y = [row['name'] for row in joined], color = list_of_colors_one_for_each_row, ) ) # We need a list of the categorical coordinates names = list(set(row['name'] for row in joined)) # rect takes center coords (x,y) and width and height. We will draw # one rectangle for each row. rect('x', 'y', # use the 'x' and 'y' fields from the data source 0.9, 0.9, # use 0.9 for both width and height of each rectangle color = 'color', # use the 'color' field to set the color source = source, # use the data source we created above x_range = names, # sequence of categorical coords for x-axis y_range = names, # sequence of categorical coords for y-axis ) 

Несколько примечаний:

  • Для числовых данных x_range и y_range обычно получают автоматически. Мы должны здесь прямо указать, потому что мы используем категориальные координаты.

  • Вы можете заказать список имен для x_range и y_range , как вам нравится, это порядок, который они отображают на оси графика.

  • Я предполагаю, что вы хотите использовать категориальные координаты. 🙂 Вот что делает пример Les Mes. См. Нижнюю часть этого ответа, если вы хотите численные координаты.

  • Для получения дополнительной информации есть учебник Bokeh по адресу http://bokeh.pydata.org/tutorial/index.html

Кроме того, пример Les Mis был немного сложнее (у него был инструмент зависания), поэтому мы создали ColumnDataSource вручную. Если вам просто нужен простой сюжет, вы, вероятно, можете сами пропустить создание источника данных и просто передать данные непосредственно на прямой:

 names = list(set(row['name'] for row in joined)) rect(names, # x (categorical) coordinate for each rectangle names, # y (categorical) coordinate for each rectangle 0.9, 0.9, # use 0.9 for both width and height of each rectangle color = some_colors, # color for each rect x_range = names, # sequence of categorical coords for x-axis y_range = names, # sequence of categorical coords for y-axis ) 

Другое примечание: это только графические прямоугольники на диагонали, где x- и y-координаты одинаковы. Это похоже на то, что вы хотите от своего описания. Но только для полноты можно построить прямоугольники с разными x- и y-координатами. Пример Les Mis делает это.

Наконец, может быть, вы действительно не хотите категорических осей? Если вы просто хотите использовать числовой индекс координат, его еще проще:

 inds = [row['index'] for row in joined] rect(inds, # x-coordinate for each rectangle inds, # y-coordinate for each rectangle 0.9, 0.9, # use 0.9 for both width and height of each rectangle color = some_colors, # color for each rect ) 

Изменить : Вот полный пример выполнения, который использует числовые координаты:

 from bokeh.plotting import * output_file("foo.html") inds = [2, 5, 6, 8, 9] colors = ["red", "orange", "blue", "green", "#4488aa"] rect(inds, inds, 1.0, 1.0, color=colors) show() 

и здесь используется тот, который использует те же значения, что и категориальные комбинации:

 from bokeh.plotting import * output_file("foo.html") inds = [str(x) for x in [2, 5, 6, 8, 9]] colors = ["red", "orange", "blue", "green", "#4488aa"] rect(inds, inds, 1.0, 1.0, color=colors, x_range=inds, y_range=inds) show() 
  • Как бы я перебирал список файлов и составлял их как подзаголовки на одной фигуре?
  • Как передать параметры в on_key в fig.canvas.mpl_connect ('key_press_event', on_key)?
  • Как повернуть отметки по типу x-axis в панели Pandas barplot
  • нарисуйте гладкий многоугольник вокруг точек данных на участке рассеяния, в matplotlib
  • Элемент одной легенды с двумя строками
  • Графики matplotlib выглядят как R по умолчанию?
  • Как заполнить цвет радуги под кривой в Python matplotlib
  • Построение многозначной поверхности в майави
  • Python - лучший язык программирования в мире.