我正在制作一系列带有两个分类变量和一个数字的条形图数据。下面是我所拥有的,但是我很想做的是像facet_wrap
in中那样使用分类变量之一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))
这给出了这样的内容:
city industry jobs
0 z b 180
1 z c 121
2 x a 33
3 z a 121
4 z c 236
但是,我想看到的是这样的:
## 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)
我用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)
有两个问题:
ggplot
示例中facet_wrap示例中的内容吗?此处的第二个示例:http : //pandas-docs.github.io/pandas-docs-travis/visualization.html#bar-plots
无论如何,您始终可以像手动操作那样手动进行操作。
编辑:顺便说一句,您始终可以在python中使用rpy2,因此您可以执行与R中相同的所有操作。
另外,请查看以下内容:http : //pandas.pydata.org/pandas-docs/stable/rplot.html我不确定,但它可能有助于在许多面板上创建图,尽管可能需要进一步阅读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句