pandas/matplotlib:刻面条形图

ako*_*ako 5 python r matplotlib ggplot2 pandas

我正在制作一系列带有两个分类变量和一个数字的数据条形图.我所拥有的是下面的内容,但我喜欢做的是通过其中一个分类变量进行facet_wrap分析ggplot.我有一个有点工作的例子,但我得到了错误的绘图类型(行而不是条形),我在循环中对数据进行子集化 - 这不是最好的方法.

## 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))
Run Code Online (Sandbox Code Playgroud)

这给出了这样的东西:

  city industry  jobs
0    z        b   180
1    z        c   121
2    x        a    33
3    z        a   121
4    z        c   236
Run Code Online (Sandbox Code Playgroud)

firstplot

但是,我希望看到的是这样的:

## 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我用matplotlib得到的最接近的是这样的:

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以有两个问题:

  1. 我可以使用AxesSubplot对象绘制条形图(它们如此处所示绘制线条),最后得到ggplot示例中facet_wrap示例行的内容;
  2. 在生成诸如此尝试的图表的循环中,我将每个数据的子集化.我无法想象这是进行这种刻面的"正确"方法吗?

Phl*_*lya 4

这里的第二个例子:http ://pandas-docs.github.io/pandas-docs-travis/visualization.html#bar-plots

无论如何,您始终可以手动完成此操作,就像您自己一样。

编辑:顺便说一句,你总是可以在 python 中使用 rpy2,所以你可以做与 R 中相同的事情。

另外,看看这个: https: //pandas.pydata.org/pandas-docs/version/0.14.1/rplot.html 我不确定,但它应该有助于在许多面板上创建绘图,尽管可能需要进一步阅读。

  • 第一个链接已损坏。 (2认同)