2015-06-26 4 views
1

Я пытаюсь построить динамически размерный пузырь (карта рассеивания). Когда я пытаюсь построить со случайными данными, я могу очень хорошо заговорить. Но когда я пытаюсь разобрать мой входной файл, я не могу заговорить.Bubble plot или Heatmap в matplotlib

Вход:

Nos,Place,Way,Name,00:00:00,12:00:00 
123,London,Air,Apollo,342,972 
123,London,Rail,Beta,2352,342 
123,Paris,Bus,Beta,545,353 
345,Paris,Bus,Rava,652,974 
345,Rome,Bus,Rava,2325,56 
345,London,Air,Rava,2532,9853 
567,Paris,Air,Apollo,545,544 
567,Rome,Rail,Apollo,5454,5 
876,Japan,Rail,Apollo,644,54 
876,Japan,Bus,Beta,45,57 

Программа:

import pandas as pd 
from pandas import DataFrame 
import pandas.io.data 
import matplotlib.pyplot as plt 
import numpy as np 
import seaborn as sns 


df=pd.read_csv('text_2.csv') 


#SIZE OF BUBBLES CHANGES 

fig = plt.figure() 

ax = fig.add_subplot(1,1,1) 

ax.scatter(df['Place'],df['Name'], s=df['00:00:00']) # Added third variable income as size of the bubble 


plt.show() 

Я пытаюсь поставить Place в x axis и Name в y axis и Size быть взяты из count(00:00). Значительный пузырь Я не мог найти много примеров. Любые ценные предложения присваиваются. Заранее спасибо. Почему я получаю ошибку в столбце (00:00) и как передать значения этого столбца?

Ошибка:

Traceback (most recent call last): 
    File "Bubble_plot.py", line 18, in <module> 
    ax.scatter(df['Place'],df['Name'], s=df['00:00:00']) # Added third variable income as size of the bubble 
    File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 6266, in scatter 
    x, y, s, c = cbook.delete_masked_points(x, y, s, c) 
    File "/usr/lib/pymodules/python2.7/matplotlib/cbook.py", line 1774, in delete_masked_points 
    raise ValueError("First argument must be a sequence") 
ValueError: First argument must be a sequence 
+0

Что именно ваш вопрос? В вашем посте нет ни одного вопросительного знака. Что не удается? Пожалуйста, будьте более конкретными. – hitzg

+1

Отредактировано приложение. –

+2

Ну нет столбца '' 00: 00: 00'' (а не '' 00: 00'') ?! – hitzg

ответ

2

Я надеялся, что это может работать, только изменяя «Имя» и «Place» в categoricals, но не повезло там (либо участка или Сиборн). Это будет работать в основном, если вы конвертируете их в целые числа, но затем вы потеряете метки, которые у вас есть со строками или категориальными. FWIW:

df2 = df.copy() 
for c in ['Place','Name']: 
    df2[c] = df2[c].astype('category').cat.codes 

fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
ax.scatter(df2['Place'],df2['Name'], s=df2['00:00:00']) 

enter image description here

Или, может быть, Heatmap будет работать лучше? Кажется, что он принимает категоричность, поэтому вы получаете бесплатную маркировку.

df3 = df.copy() 
for c in ['Place','Name']: 
    df3[c] = df3[c].astype('category') 

sns.heatmap(df3.pivot_table(index='Place', columns='Name', values='00:00:00')) 

enter image description here

+0

Ты просто спасатель жизни :) Я тоже думал о тепловых картах. Можно ли иметь аннотации с 'count'' 00: 00: 00'? –

+1

'annot = True', хотя он форматирует как float вместо integer. Не уверен, есть ли способ изменить это. Вы также можете просто распечатать сам pivot_table. – JohnE

+0

Почему я спрашиваю вас о предположении, что у нас есть 2-3 значения для каждого имени, т. Е. Ячейка может отображать все эти значения, но я пытаюсь получить добавление всех счетчиков, входящих в эти ячейки имен. –