2015-07-09 3 views
3

Это беспокоило меня последние 30 минут. То, что я хотел бы сделать, это разброс сюжета по категориям. Я посмотрел документацию, но я не смог найти ответ. Я посмотрел here, но когда я запустил это в iPython Notebook, я ничего не получил.Рассеянный участок по категориям в пандах

Вот мой кадр данных:

time cpu wait category 
8  1  0.5  a 
9  2  0.2  a 
2  3  0.1  b 
10  4  0.7  c 
3  5  0.2  c 
5  6  0.8  b 

В идеале я хотел бы иметь точечный график, который показывает процессор на оси х, ждать на оси у, и каждая точка на графике отличается категория. Например, если a = красный, b = синий и c = зеленый, тогда точка (1, 0,5) и (2, 0,2) должна быть красной, (3, 0,1) и (6, 0,8) должна быть синей и т. Д.

Как мне сделать это с помощью панд? или matplotlib? в зависимости от того, какая работа.

ответ

1

Это, по существу, тот же ответ, как @JoeCondron , но два лайнера:

cmap = {'a': 'red', 'b': 'blue', 'c': 'yellow'} 
df.plot(x='cpu', y='wait', kind='scatter', 
     colors=[cmap.get(c, 'black') for c in df.category]) 

Если цвет не отображается для категории, по умолчанию он черный.

EDIT:

Вышеперечисленные работы для панд 0.14.1. Для 0.16.2 «цвета» необходимо изменить на «c»:

df.plot(x='cpu', y='wait', kind='scatter', 
    c=[cmap.get(c, 'black') for c in df.category]) 
+0

Я пробовал это, но я получаю ValueError: to_rgba: Invalid rgba arg "0 255 –

+0

Работает для меня на Pandas 0.14.1. Какую версию вы используете? Также я изменю, чтобы разрешить цвет по умолчанию, если категория не отображается. – Alexander

+0

Моя версия 0.16.2 –

2

Вы могли бы сделать

color_map = {'a': 'r', 'b': 'b', 'c': 'y'} 
ax = plt.subplot() 
x, y = df.cpu, df.wait 
colors = df.category.map(color_map) 
ax.scatter(x, y, color=colors) 

Это даст вам красный цвет для категории а, синий для б, желтый с. Итак, вы можете пропустить список псевдонимов цветов той же длины, что и массивы. Вы можете ознакомиться со множеством доступных цветов здесь: http://matplotlib.org/api/colors_api.html. Я не думаю, что метод plot очень полезен для разброса.

+0

Так что, в следующий раз, когда мне не прибегать к SO, может ли мой вопрос быть разрешен посредством документации? Или это просто общее знание? –

+0

Я бы не сказал общих знаний. Документы matplotlib невелики, но у них много примеров. Однако вам нужно загрузить код, чтобы прочитать его. Думаю, я узнал по пробной версии и ошибкам. Освоение (не сказать, что у меня есть) API для matplotlib сложно. Кстати, вы можете передать массив цветов короче, чем количество очков, и он будет просто проходить через них. Кроме того, метод рассеяния имеет параметр '' '' '' '', который контролирует размер точек. Это может быть один номер или массив чисел, и он циклически проходит через них так же, как цвета – JoeCondron

+0

Я получаю: AttributeError: Неизвестные цвета свойств, я не хватает библиотеки? Это то, что я сейчас: импорт панда как PD импорт NumPy как нп импорта Matplotlib импорта matplotlib.pyplot как рх импорта таблицы как туберкулёз % Matplotlib инлайн –

1

Я бы создать столбец с вашими цветами, основанные на категории, то сделайте следующее, где топор является Matplotlib топор, df- ваш dataframe:

ax.scatter(df['cpu'], df['wait'], marker = '.', c = df['colors'], s = 100) 
Смежные вопросы