Python seaborn中具有数字独立数据的水平条形图

Python seaborn中具有数字独立数据的水平条形图,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,这就是你会注意到的,他们使用一些称为崩溃的数据集,并绘制一些分类变量和一些数值变量的图形。要使其水平,他们只需翻转x和y变量,这非常简单 我的问题是我的类别是数字的,这会导致问题。一个最小的可复制示例使用他们的数据集。基本上,这应该是同一个图形,一个水平,另一个垂直。正如你所看到的,它们都是垂直的 import seaborn as sns import matplotlib.pyplot as plt sns.set(style="whitegrid") crashes

这就是你会注意到的,他们使用一些称为崩溃的数据集,并绘制一些分类变量和一些数值变量的图形。要使其水平,他们只需翻转x和y变量,这非常简单

我的问题是我的类别是数字的,这会导致问题。一个最小的可复制示例使用他们的数据集。基本上,这应该是同一个图形,一个水平,另一个垂直。正如你所看到的,它们都是垂直的

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")


crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)

crashes['roundTotal'] = np.round(crashes['total']).astype(int)
crashesMod = crashes.groupby(['roundTotal']).count().reset_index()
crashesMod['VsAverage'] = crashesMod['total'] > crashesMod.total.mean()

sns.barplot(x = 'roundTotal', y = 'total', hue = 'VsAverage', data = crashesMod)
plt.show()
sns.barplot(y = 'roundTotal', x = 'total', hue = 'VsAverage', data = crashesMod)

我试着制作字符串类型的“roundTotal”列,因为我想象它在幕后进行一些猜测,但在使用2个数字类型时失败了,但后来我遇到了一个问题
TypeError:/:'str'和'int'的操作数类型不受支持

打印前只需添加以下内容:

crashesMod.roundTotal=crashesMod.roundTotal.astype('category')
crashesMod.VsAverage=crashesMod.VsAverage.astype('category')

根据seaborn文档,您应该使用“orient”选项:

将numpy导入为np
导入seaborn作为sns
将matplotlib.pyplot作为plt导入
sns.set(style=“whitegrid”)
图,ax=plt.子批次(图尺寸=(3.5,6))
崩溃=(
sns.load_数据集(“车祸”)
.sort_值(“总计”,升序=False)
.assign(roundTotal=lambda-df:df['total'].round().astype(int).astype('category'))
.groupby(['roundTotal']).count()
.reset_index()
.assign(VsAverage=lambda df:df['total']>df['total'].mean())
.pipe((sns.barplot,'data'),y='roundTotal',x='total',
色调=垂直平均,方向=水平,轴=轴)
)
ax.invert_yaxis()
这给了我:


使用pandas将其作为分类变量:或者
orient=“h”
您可能还希望
dodge=False
在这里最好使用数据帧的
assign
方法,而不是依赖数据帧的点访问器columns@qwertylpc使用
.assign
创建用于打印的全新列。你甚至可以将结果直接传送到seaborn,这样它就完全是昙花一现的了。@PaulH你知道如何控制列的顺序吗。例如,y轴从6-24(在本例中)开始下降,而不是上升。我刚刚试着调用
sort\u values()
@qwertylpc查看下面的答案