【问题标题】:How to plot a barchart by pandas groupby and then loop for all unique values如何通过 pandas groupby 绘制条形图,然后循环获取所有唯一值
【发布时间】:2020-11-07 07:27:06
【问题描述】:

我有以下数据,其中包含人名、分数和尝试次数:

# 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

我希望为每个唯一的Name 绘制一个seaborn horizontal bar plot,其中Score 作为值,轴作为Attempt 数字(类别),然后创建一个循环,以便生成一个 3 页每个人的PDF。我不太明白如何:

a) 由 groupby 绘制 - 我需要制作多个切片数据帧吗?

b) 循环生成一个 PDF 的多个页面。

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    这是一个循环,将每个名称的数据绘制为单独的图表:

    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 页?),这似乎是与制作绘图不同的问题。

    但请注意,您可以将图表直接保存到(一页)PDF 中:

    #in the loop
        fig.savefig(name+'.pdf')
    

    【讨论】:

    • 非常感谢汤姆!我将把它移到一个新问题上。我基本上只想要第 1 页的图 1 (Tom),第 2 页的图 2 (Nick) 等等。
    猜你喜欢
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2018-02-27
    • 2022-11-16
    • 2019-02-13
    • 2017-08-27
    • 2016-06-21
    相关资源
    最近更新 更多