pandas / matplotlib: wykresy słupkowe

Tworzę serie wykresów słupkowych danych z dwiema zmiennymi kategorycznymi i jedną liczbową. Mam to, co poniżej, ale to, co chciałbym zrobić, to obliczyć jedną ze zmiennych kategorycznych, tak jak w przypadkufacet_wrap wggplot. Mam nieco działający przykład, ale otrzymuję niewłaściwy typ wykresu (linie, a nie słupki) i wykonuję podzbiór danych w pętli - to nie może być najlepszy sposób.

## first try--plain vanilla
import pandas as pd
import numpy as np
N = 100

## generate toy data
ind = np.random.choice(['a','b','c'], N)
cty = np.random.choice(['x','y','z'], N)
jobs = np.random.randint(low=1,high=250,size=N)

## prep data frame
df_city = pd.DataFrame({'industry':ind,'city':cty,'jobs':jobs})
df_city_grouped = df_city.groupby(['city','industry']).jobs.sum().unstack()
df_city_grouped.plot(kind='bar',stacked=True,figsize=(9, 6))

Daje to coś takiego:

  city industry  jobs
0    z        b   180
1    z        c   121
2    x        a    33
3    z        a   121
4    z        c   236

Jednak chciałbym zobaczyć coś takiego:

## R code
library(plyr)
df_city<-read.csv('/home/aksel/Downloads/mockcity.csv',sep='\t')

## summarize
df_city_grouped <- ddply(df_city, .(city,industry), summarise, jobstot = sum(jobs))

## plot
ggplot(df_city_grouped, aes(x=industry, y=jobstot)) +
  geom_bar(stat='identity') +
  facet_wrap(~city)

Najbliższe, jakie otrzymuję z matplotlibem, to coś takiego:

cols =df_city.city.value_counts().shape[0]
fig, axes = plt.subplots(1, cols, figsize=(8, 8))

for x, city in enumerate(df_city.city.value_counts().index.values):
    data = df_city[(df_city['city'] == city)]
    data = data.groupby(['industry']).jobs.sum()
    axes[x].plot(data)

Tak więc dwa pytania:

Czy mogę wykonywać wykresy słupkowe (wykreślają linie tak, jak tutaj pokazano) za pomocą obiektu AxesSubplot i kończą na czymś w rodzaju przykładu facet_wrap zggplot przykład;W pętlach generujących wykresy, takie jak ta próba, podzbiorem danych w każdym. Nie mogę sobie wyobrazić, że jest to „właściwy” sposób wykonywania tego typu facetingu?

questionAnswers(2)

yourAnswerToTheQuestion