python - 如何在单个条形图中做两个类别(子图)
问题描述
我需要有关条形图代码的帮助。我的第一个问题是尝试在活动井和非活动井之间进行代码排序。我的第二个问题是在同一个条形图上创建两个子类别(活动和非活动)。这是我到目前为止所写的。任何帮助都会很棒。
df = pd.read_csv('Data.CSV')
Active= df['Wells Status']
Inactive= df['Wells Status']
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, Active, width, label='Active')
rects2 = ax.bar(x + width/2, Inactive, width, label='Inactive')
plt.xlabel('County', fontsize = 20)
plt.ylabel('Total of Wells', fontsize = 20)
plt.title('Wells by County',fontsize=30)
plt.show()
解决方案
我认为,如果我的理解正确,您正在尝试计算给定县的活动井和非活动井的数量。
首先,您正在调用的列中有一个错字。在您的数据中,该列是 'Well Status'
而不是'Wells Status'
.
接下来,您将需要根据 ACTIVE/INACTIVE 状态对数据进行排序,而不是仅使用df['Well Status']
. 为此,您可以使用以下代码行。
Active = df[df['Well Status'].str.match('ACTIVE')]
Inactive = df[df['Well Status'].str.match('INACTIVE')]
这将返回整个 DataFrame,但仅返回列'Well Status'
分别等于活动/非活动的行。
要回答您的第二个问题,我们将需要采用我们的两个 Active 和 Inactive 并按县排序。对于您提供的数据,只有一个县,因此您可以使用以下数据。
terry_active = Active[Active['County'].str.match('TERRY (TX)')]
terry_inactive = Inactive[Inactive['County'].str.match('TERRY (TX)')]
如果有更多县,那么您可以使用相同的方法,但只需更改变量名称,然后更改您排序的县/教区。现在这当然是硬编码的,所以对于 3 个以上的县,我会设置一个函数或一个 for 循环来对每个县进行排序,因为根据我的经验,硬编码实际上只对快速项目有益。我通常会尝试编写更通用的可重用代码,但很快就会有一些硬编码工作,并且通常会帮助我编写更通用的代码。
然后绘制你可以使用下面的代码。
counties = ['Terry (TX)']
x = np.arange(len(counties))
fig, ax = plt.subplots()
ax.bar(x - 0.5/2, len(terry_active), label='Active', width=0.5)
ax.bar(x + 0.5/2, len(terry_inactive), label='Inactive', width=0.5)
ax.set_xticks(x)
ax.set_xticklabels(counties)
ax.set_xlabel('County')
ax.set_ylabel('# of Wells')
ax.set_title('Wells by County')
plt.legend()
plt.show()
这又是硬编码的。要做到以上提供的数据中的一个县,您需要将其他县添加到县列表中,然后重复上述步骤进行排序,找出总井数。然后只需添加更多ax.bar()
代码行,以便制作每个条。
推荐阅读
- java - 从 Firebase 为每个特定帖子检索特定数据的比 datasnapshot 更好的方法?返回的位置错误
- c# - 在 asp.net 核心应用程序中应该如何实现对数据库的异步日志记录?
- c++ - 要显示的 C 程序输入是 int 还是 char?
- reactjs - 错误:项目(...):渲染没有返回任何内容。这通常意味着缺少 return 语句。或者,不渲染任何内容,返回 null
- php - 错误htaccess隐藏php扩展,只是隐藏html
- c# - Firebase 在 Xamarin 表单中按日期过滤
- gitlab - GitLab 不从根仓库提供 404.html 错误页面
- selenium - 在 Python + webdriver 中执行 selenium 库并阻止会话
- html - 无法将属性“textContent”设置为 null,即使它已初始化并在调用方法后存在
- android - 华为 HMS Maps Android Codelab 不工作