我想在python中制作多面板条形图,每个面板都有不同的类别。下面,我将展示一个如何用R中的ggplot2来做这个的例子。我正在寻找可以做等效的python中的任何方法。到目前为止,我一直在python-ggplot和seaborn以及matplotlib的基础上努力做到这一点到目前为止没有运气。
您可以在我的相关帖子中看到此前的尝试: using facet_wrap with categorical variables that differ between facet panes
在这篇文章中,我现在要问是否有任何方法可以制作我在python中寻找的那种情节(而不仅仅是尝试使用特定的方法)。
好的:R中的例子:
animal = c('sheep', 'sheep', 'cow', 'cow', 'horse', 'horse', 'horse')
attribute = c('standard', 'woolly', 'brown', 'spotted', 'red', 'brown', 'grey')
population = c(12, 2, 7, 3, 2, 4, 5)
animalCounts = data.frame(animal,attribute,population)
ggplot(aes(x = attribute, weight = population), data = animalCounts) + geom_bar() +
facet_wrap(~animal, scales = "free") + scale_y_continuous ( limits= c(0,12))
我可以在python中创建一个类似的数据框
animal = pd.Series(['sheep', 'sheep', 'cow', 'cow', 'horse', 'horse', 'horse'], dtype = 'category')
attribute = pd.Series(['standard', 'woolly', 'brown', 'spotted', 'red', 'brown', 'grey'], dtype = 'category')
population = pd.Series([12, 2, 7, 3, 2, 4, 5])
animalCounts = pd.DataFrame({'animal' : animal, 'attribute' : attribute, 'population': population})
任何帮助在python中获得可比较的数字都将受到高度赞赏。如果我不必使用rpy2,那就是虚构的奖励积分。
答案 0 :(得分:1)
由于问题已在last question中提出,python ggplot无法使用facet_wrap
。
因此,使用标准的pandas / matplotlib技术是一种选择。
import matplotlib.pyplot as plt
import pandas as pd
animal = pd.Series(['sheep', 'sheep', 'cow', 'cow', 'horse', 'horse', 'horse'], dtype = 'category')
attribute = pd.Series(['standard', 'woolly', 'brown', 'spotted', 'red', 'brown', 'grey'], dtype = 'category')
population = pd.Series([12, 2, 7, 3, 2, 4, 5])
df = pd.DataFrame({'animal' : animal, 'attribute' : attribute, 'population': population})
fig, axes = plt.subplots(ncols=3)
for i, (name, group) in enumerate(df.groupby("animal")):
axes[i].set_title(name)
group.plot(kind="bar", x = "attribute", y="population", ax=axes[i], legend=False)
axes[i].set_ylabel("count")
axes[i].set_xlabel("")
axes[1].set_xlabel("attribute")
plt.tight_layout()
plt.show()