python - 如何通过 pandas groupby 绘制条形图,然后循环获取所有唯一值
问题描述
我有以下数据,其中包含人名、分数和尝试次数:
# Import pandas library
import pandas as pd
import numpy as np
# Data
data = [['tom', 10,1], ['nick', 15,1], ['dom', 14,1], ['tom', 15,2], ['nick', 18,2], ['dom', 15,2], ['tom', 17,3]
, ['nick', 14,3], ['tom',16 ,4], ['dom', 22,3]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['Name', 'Score','Attempt'])
# print dataframe.
df
Name Score Attempt
0 tom 10 1
1 nick 15 1
2 dom 14 1
3 tom 15 2
4 nick 18 2
5 dom 15 2
6 tom 17 3
7 nick 14 3
8 tom 16 4
9 dom 22 3
我希望seaborn horizontal bar plot
为每个Name
具有Score
值和轴作为Attempt
数字(类别)的唯一值绘制一个,然后创建一个循环,以便为每个人生成一个 3 页的 PDF。我不太明白的是如何:
a)由 groupby 绘制 - 我需要制作多个切片数据帧吗?
b)使其循环生成PDF的多个页面。
任何帮助将非常感激!谢谢!
解决方案
这是一个循环,将每个名称的数据绘制为单独的图表:
plt.style.use('seaborn')
for name in df['Name'].unique():
fig, ax = plt.subplots()
sub = df[df.Name == name]
sns.barplot(y='Attempt',x='Score',data=sub, orient='h', ax=ax)
ax.set_title(name.capitalize())
三个地块之一:
我会将您问题的 PDF 部分移至新帖子,因为您的要求有点模糊(什么会填满 3 页?),这似乎是与制作绘图不同的问题。
但请注意,您可以将图形直接保存到(1 页)PDF 中:
#in the loop
fig.savefig(name+'.pdf')
推荐阅读
- javascript - 由于更新大量文件(gulp、watch)导致的内存泄漏
- android - 是否可以在没有服务器的情况下直接从文件系统提供 Angular 2+ 应用程序?在 Android 或 Xamarin WebView 中?
- ios - CoreML 出错:导入 mymodel.mlmodel 时源文件无效
- c++ - 数据返回一次后如何从类实例中删除数据
- tableau-api - Tableau 访问生产数据库或中介
- php - 正则表达式从 PDF 中提取的字符串中获取整个段落
- java - 在java中通过key从对象中获取值
- powershell - powershell继续循环直到变量
- html - HTML5:枚举而不是 ul 用于段落内的内联列表?
- dart - Flutter:无法连接包地理位置