Python seaborn FaceGrid,按行和列分开排列的条形图
鉴于一些数据:Python seaborn FaceGrid,按行和列分开排列的条形图,python,seaborn,Python,Seaborn,鉴于一些数据: pt = pd.DataFrame({'alrmV':[000,000,000,101,101,111,111], 'he':[e,e,e,e,h,e,e], 'inc':[0,0,0,0,0,1,1]}) 我想创建一个按行和列分开的条形图 g = sns.FacetGrid(pt, row='inc', col='he', margin_titles=True) g.map( sns.barplot(
pt = pd.DataFrame({'alrmV':[000,000,000,101,101,111,111],
'he':[e,e,e,e,h,e,e],
'inc':[0,0,0,0,0,1,1]})
我想创建一个按行和列分开的条形图
g = sns.FacetGrid(pt, row='inc', col='he', margin_titles=True)
g.map( sns.barplot(pt['alrmV']), color='steelblue')
这是可行的,但我如何添加:
alrmV
类型grouped = pt.groupby( ['he','inc'] )
grw= grouped['alrmV'].value_counts().fillna(0.) #.unstack().fillna(0.)
grw[:2].plot(kind='bar')
使用FacetGrid,切片限制显示的总计数
g.map(sns.barplot(pt['alrmV'][:10]), color='steelblue')
那么,我如何才能得到一个条形图,它是按行和列分开的,并且是有序的,只显示前2个计数?我无法让示例使用您提供的数据,因此我将使用其中一个示例数据集来演示:
import seaborn as sns
tips = sns.load_dataset("tips")
我们将使用day
作为条形图的x
变量,在列中绘制sex
,在行中绘制smoker
。为了把前两天安排好,我们可以
top_two_ordered = tips.day.value_counts().order().index[-2:]
然后,您可以将此列表传递到barplot
的x\u order
参数
虽然您可以在此处直接使用FaceGrid
,但使用factorplot
功能可能更容易:
g = sns.factorplot("day", col="sex", row="smoker",
data=tips, margin_titles=True, size=3,
x_order=top_two_ordered)
其中:
虽然我不建议完全按照您的建议(在每个方面为不同的x值绘制条形图),但可以通过执行以下操作来实现
g = sns.FacetGrid(tips, col="sex", row="smoker", sharex=False)
def ordered_barplot(data, **kws):
x_order = data.day.value_counts().order().index[-2:]
sns.barplot(data.day, x_order=x_order)
g.map_dataframe(ordered_barplot)
使
我无法让示例与您提供的数据一起使用,因此我将使用其中一个示例数据集来演示:
import seaborn as sns
tips = sns.load_dataset("tips")
我们将使用day
作为条形图的x
变量,在列中绘制sex
,在行中绘制smoker
。为了把前两天安排好,我们可以
top_two_ordered = tips.day.value_counts().order().index[-2:]
然后,您可以将此列表传递到barplot
的x\u order
参数
虽然您可以在此处直接使用FaceGrid
,但使用factorplot
功能可能更容易:
g = sns.factorplot("day", col="sex", row="smoker",
data=tips, margin_titles=True, size=3,
x_order=top_two_ordered)
其中:
虽然我不建议完全按照您的建议(在每个方面为不同的x值绘制条形图),但可以通过执行以下操作来实现
g = sns.FacetGrid(tips, col="sex", row="smoker", sharex=False)
def ordered_barplot(data, **kws):
x_order = data.day.value_counts().order().index[-2:]
sns.barplot(data.day, x_order=x_order)
g.map_dataframe(ordered_barplot)
使
好的,是否可以获得每个性别的子组值计数?所以如果男性在周一,周二吸烟更多。。。你能通过某种方式传递分组值吗?不,不能通过seaborn。我认为这将是一个令人困惑的情节。嗯,这不完全是真的。你可以做到这一点,但我不推荐。请参见编辑以回答。--谢谢!(试图为轴标签设置(rot=10)……运气不好,我如何旋转轴标签?-如果这是一个简单的问题,很抱歉,但找不到它)如果你指的是xticklabels,你可以做
g.set\u xticklabels(rotation=10)
,尽管这只会做最下面一行(我猜这实际上是一个bug)。对于其他内容,您需要在g.axes
处循环遍历轴数组,并像在matplotlib中一样更改它们。好的,是否可以获得每个性别的子组值计数?所以如果男性在周一,周二吸烟更多。。。你能通过某种方式传递分组值吗?不,不能通过seaborn。我认为这将是一个令人困惑的情节。嗯,这不完全是真的。你可以做到这一点,但我不推荐。请参见编辑以回答。--谢谢!(试图为轴标签设置(rot=10)……运气不好,我如何旋转轴标签?-如果这是一个简单的问题,很抱歉,但找不到它)如果你指的是xticklabels,你可以做g.set\u xticklabels(rotation=10)
,尽管这只会做最下面一行(我猜这实际上是一个bug)。对于其他内容,您需要在g.axes
处循环遍历轴数组,并像在matplotlib中通常那样更改它们。在此处为安装了>0.9.0的其他人添加注释,您可能会发现解决方案的帮助在此处为安装了>0.9.0的其他人添加注释,您可能会发现解决方案的帮助