【问题标题】:Stacked bar plot of large data in pythonpython中大数据的堆积条形图
【发布时间】:2020-04-12 19:36:20
【问题描述】:

我想在 python 中从 csv 文件中绘制堆积条形图。我有三列数据

year word frequency
2018 xyz 12
2017 gfh 14
2018 sdd 10
2015 fdh 1
2014 sss 3
2014 gfh 12
2013 gfh 2
2012 gfh 4
2011 wer 5
2010 krj 4
2009 krj 4
2019 bfg 4
... 300+ rows of data. 

我需要浏览所有数据并绘制一个根据年份分类的堆积条形图,因此 x 轴是单词,y 轴是频率,图例颜色应该显示年份。我想看看每个单词的演变是如何逐年发生的。一些技术词每年都会重复使用,因此堆栈条形图应该在顶部添加值并绘制,例如 gfh 一词最初为 2017 年绘制 14,然后在 2014 年我希望 gfh 词绘制(以不同的颜色)在 2017 年 gfh 之上的值为 12。我该怎么做?到目前为止,我在代码中调用了 csv 文件。但我不明白它如何遍历所有行并适当地堆叠单词(因为有些单词多年来一直重复)。非常感谢任何帮助。此外,这些年份在 csv 中以随机顺序排列,但我按年份对它们进行排序以使其更容易。我只是在学习 python 并试图理解这个绘图程序,因为我有 40 年的数据和大约 20 个单词。所以我认为堆叠条形图是表示它们的最佳方式。也欢迎任何其他可视化方法。

【问题讨论】:

    标签: python loops csv bar-chart stacked


    【解决方案1】:

    这可以使用pandas:

    import pandas as pd
    
    df = pd.read_csv("file.csv")
    
    # Aggregate data
    df = df.groupby(["word", "year"], as_index=False).agg({"frequency": "sum"})
    # Create list to sort by
    sorter = (
        df.groupby(["word"], as_index=False)
        .agg({"frequency": "sum"})
        .sort_values("frequency")["word"]
        .values
    )
    
    # Pivot, reindex, and plot
    df = df.pivot(index="word", columns="year", values="frequency")
    df = df.reindex(sorter)
    df.plot.bar(stacked=True)
    
    

    哪些输出:

    【讨论】:

    • 我收到一个错误,因为这个 ValueError:索引包含重复的条目,无法重塑。你能告诉我我做错了什么吗
    • 这意味着您的 csv 文件包含在 word 和 year 上重复的行。你需要先把它们结合起来,我已经更新了我的答案。
    • 嗨,谢谢,我能够绘制它。如何防止图例与我的值重叠?
    • 谢谢,有没有办法可以根据堆栈高度按升序排列?
    猜你喜欢
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2017-02-26
    • 2014-02-09
    • 2020-09-14
    相关资源
    最近更新 更多