注意:GitHub上可以找到full reproduction notebook for this question。
我有一个数据集,其中包含我想按类分组的HTTP响应代码的分布。示例数据可以这样生成:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
mock_http_response_data = pd.DataFrame({
'response_code':np.repeat([200, 201, 202, 204, 302, 304, 400, 404, 500, 502], 250 ),
})
我已经在数据中添加了一个基于“响应状态”的列,称为“响应类”。响应类包含与特定响应的类相对应的标签:
确定响应类的函数是:
^{pr2}$列的添加方式如下:
# Add 'Response class' column to API Logs, where response class is determined by HTTP status code
mock_http_response_data['response_class'] = mock_http_response_data.apply(determine_response_class, axis='columns')
“响应状态”(HTTP状态代码)数据用基本计数图正确绘制:
sns.countplot(
x='_source.response_status',
data=results_df,
color='teal',
saturation=0.7)
当我尝试创建一个countplots的FacetGrid时,图表似乎可以工作,但是标签不正确:
grid = sns.FacetGrid(mock_http_response_data, col='response_class')
grid.map(sns.countplot, 'response_code')
我预计countplots的FaceGrid将具有以下x轴标签:
如何创建countplots的FacetGrid,以便标签正确,并且分面数据从高到低排序(例如,“success”类列)?在
出现错误标签的问题是因为默认情况下,子图的x轴是共享的,因此所有绘图都将具有与最后一个绘图相同的x轴。在
您可以使用
sharex=False
参数来防止共享轴:分类的问题现在是鸡还是蛋的问题。为了设置列的顺序,您需要知道每个列的计数,这些计数是作为打印的一部分确定的。在这一点上,保持数据生成、分析和可视化之间的明确分离可能是明智的。下面将显示一个排序图,不使用
FacetGrid
,它首先对数据帧中的值进行排序。在相关问题 更多 >
编程相关推荐