pandas速成笔记(4)-数据图表
接上篇继续,做数据分析,各种数据图表是必不可少的,还是以下面这张表为例:

一、单列柱状图
假设要把9月份,A、B这2个分类的Amount提取出来画一个柱状图,可以这么做:
import pandas as pd
import matplotlib.pyplot as plt df = pd.read_excel("./data/test.xlsx") # 过滤出9月份的,A,B二个分类的数据
df = df.loc[df.Month.apply(lambda m: m == '2021-09')] \
.loc[df.Category.apply(lambda c: c in ['A', 'B'])] # 如果希望柱状图按从高到低排好,必须先把数据排好序
df.sort_values(by="Amount", inplace=True, ascending=False) # 用DataFrame的plot来绘图
df.plot.bar(x="Category", y="Amount", color="Orange", title="Amount(Month:2021-09)")
plt.tight_layout()
plt.show()
效果如下:

DateFrame自带的plot虽然能画图,但是如果希望能控制更灵活,比如:设置title的字体大小,x轴的标签不希望横着放(或旋转指定角度)等,还可以直接调用plt底层的方法
import pandas as pd
import matplotlib.pyplot as plt df = pd.read_excel("./data/test.xlsx") # 过滤出9月份的,A,B二个分类的数据
df = df.loc[df.Month.apply(lambda m: m == '2021-09')] \
.loc[df.Category.apply(lambda c: c in ['A', 'B'])] # 如果希望柱状图按从高到低排好,必须先把数据排好序
df.sort_values(by="Amount", inplace=True, ascending=False) # 也可以用plt原生的画图方法来实现,有更多控制选项
plt.bar(df.Category, df.Amount, color="Orange")
plt.xticks(df.Category, rotation="0")
plt.xlabel("Category")
plt.ylabel("Amount")
plt.title("Amount(Month:2021-09)", fontsize="16")
plt.tight_layout()
plt.show()
效果一样:

二、多列对比柱状图
假设数据长这样,想对比看看9、10这2个月,各Category的值对比:

import pandas as pd
import matplotlib.pyplot as plt df = pd.read_excel("./data/test_group.xlsx")
df.sort_values(by=["2021-10"], ascending=False, inplace=True) # 核心部分
df.plot.bar(x="Category", y=["2021-09", "2021-10"], color=["orange", "red"]) # 设置标题、x,y轴文本及字体
plt.title("Amount of 2021-09 ~ 2021-10", fontsize="16", fontweight="bold")
plt.xlabel("Category", fontweight="bold")
plt.ylabel("Amount", fontweight="bold")
# get current axis
ax = plt.gca()
# ha = horizontal align
# x轴标签,旋转45度,水平对齐方式为right
ax.set_xticklabels(df.Category, rotation=45, ha="right") # get current figure
f = plt.gcf()
# 设置左边留20%空白,底部留20%空白
f.subplots_adjust(left=0.2, bottom=0.2)
# plt.tight_layout()
plt.show()

三、叠加柱状图
还是刚才的数据,只要加一个参数stacked=True,就变成了叠加柱状图
import pandas as pd
import matplotlib.pyplot as plt df = pd.read_excel("./data/test_group.xlsx") # 加上stacked=True后,将变成叠加柱状图
df.plot.bar(x="Category", y=["2021-09", "2021-10"], stacked=True) # 下面都是美化选项
plt.title("Amount of 2021-09 ~ 2021-10", fontsize="16", fontweight="bold")
plt.xlabel("Category", fontweight="bold")
plt.ylabel("Amount", fontweight="bold")
ax = plt.gca()
ax.set_xticklabels(df.Category, rotation=45, ha="right")
f = plt.gcf()
f.subplots_adjust(left=0.15, bottom=0.20)
plt.show()
效果如下:

如果想让柱子高度从大到小排列,就不能简单的按2021-09或2021-10中的某一列来排序了!因为柱子的高度,其实是这2列值的和,所以要新增1个计算列:
...
# 新增1个计算列
df["total"] = df["2021-09"] + df["2021-10"]
df.sort_values(by="total", inplace=True, ascending=False) df.plot.bar(x="Category", y=["2021-09", "2021-10"], stacked=True)
...
效果:

叠加柱状图还可以改方向,比如:变成水平的,只需要把bar()换成barh()即可
import pandas as pd
import matplotlib.pyplot as plt df = pd.read_excel("./data/test_group.xlsx") # barh 即bar-horizontal
df.plot.barh(x="Category", y=["2021-09", "2021-10"], stacked=True) plt.title("Amount of 2021-09 ~ 2021-10", fontsize="16", fontweight="bold")
plt.xlabel("Category", fontweight="bold")
plt.ylabel("Amount", fontweight="bold")
f = plt.gcf()
f.subplots_adjust(left=0.15, bottom=0.20)
plt.show()

四、饼图
饼图通常只需要1列,来看该列各行值的占比
import pandas as pd
import matplotlib.pyplot as plt df = pd.read_excel("./data/test_group.xlsx", index_col="Category") # 核心部分
df["2021-09"].plot.pie() # 图表美化
plt.title("Amount of 2021-09", fontsize="16", fontweight="bold")
plt.ylabel("Amount", fontweight="bold")
f = plt.gcf()
f.subplots_adjust(left=0.15, bottom=0.20)
plt.show()
效果:

默认情况下,饼图各部分是逆时针方向的,如果想换个方向,加上counterclock=False即可
# 核心部分
df["2021-09"].plot.pie(counterclock=False)
效果:

五、折线图
import pandas as pd
import matplotlib.pyplot as plt df = pd.DataFrame(columns=["Month", "Amount"], data=[['2021-09', 10],
['2021-10', 15],
['2021-11', 8],
['2021-12', 11],
['2022-01', 11]
])
df.set_index("Month", inplace=True)
print(df) # 核心部分
df.plot(y=['Amount'], color="red") # 图表美化
plt.title("Amount of Month", fontsize="16", fontweight="bold")
plt.xlabel("Month", fontweight="bold")
plt.ylabel("Amount", fontweight="bold")
f = plt.gcf()
f.subplots_adjust(left=0.15, bottom=0.20)
plt.show()
输出:
Amount
Month
2021-09 10
2021-10 15
2021-11 8
2021-12 11
2022-01 11

pandas速成笔记(4)-数据图表的更多相关文章
- 【转】Pandas学习笔记(二)选择数据
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- @1-5使用pandas保存豆瓣短评数据
使用pandas保存豆瓣短评数据 Python爬虫(入门+进阶) DC学院 本节课程的内容是介绍open函数和pandas两种保存已爬取的数据的方法,并通过实际例子使用pandas保存数据. ...
- 【转】Pandas学习笔记(七)plot画图
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 【转】Pandas学习笔记(六)合并 merge
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 【转】Pandas学习笔记(五)合并 concat
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 【转】Pandas学习笔记(四)处理丢失值
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 【转】Pandas学习笔记(三)修改&添加值
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 【转】Pandas学习笔记(一)基本介绍
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 实操 | 内存占用减少高达90%,还不用升级硬件?没错,这篇文章教你妙用Pandas轻松处理大规模数据
注:Pandas(Python Data Analysis Library) 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.此外,Pandas 纳入了大量库和一些标准的数据模型 ...
- pandas库笔记
本笔记为自学笔记 1.pandas.DataFrame() 一种保存矩阵的数据格式 grades_df = pd.DataFrame( data={'exam1': [43, 81, 78, 75, ...
随机推荐
- 太喜欢啦,浏览器中的SQL神器:WhatTheDuck让CSV分析像聊天一样简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 基于DuckDB的轻量级Web应用 | 完全浏览器端运行 | 零数据泄露风险 | 支持复杂S ...
- K8s新手系列之初始Deployment资源
概述 官网:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/ Deployment简称deploy ...
- 【HUST】网络攻防实践|6_物联网设备固件安全实验|flag2~5速通指南
写在最前:最近没空写报告,实验原理虽然已经摸清了但是没空写.flag2到4是一些大胆的想法的通关方式,flag5是正经通关的.之后写报告的时候会补发正经的实验原理,和flag2到4正常的通关方式. 记 ...
- 自实现模态对话框-DoModal函数
参考CDialog::DoModal函数的实现方式,自己实现了模态框相关功能. ModalBase.h头文件 1 #include <afxwin.h> 2 3 #define ID_NU ...
- C#之方法
在C#中,方法是类的函数成员,方法由两个主要部分: (1)方法头:指定了方法的特征,包括是否返回数据,如果返回,返回什么类型;方法的名称;哪种类型的数据可以传递给方法或从方法返回,以及如何处理这些数据 ...
- L1-6、Prompt 与上下文的关系🤖
模型不是"记性差",只是"提示不清". 为什么理解上下文对话很重要? 大模型具备 "上下文窗口" 的能力,可以"记住"你 ...
- JVM 使用mat分析Dump文件排查大对象解决系统full GC问题
摘要:介绍内存分析工具Mat查找大对象的使用方法,定位full GC根源,拉升系统吞吐量,避免内存泄漏. 引言 线上服务器频繁发生full GC,直接拉低系统吞吐量,甚至OOM.今天我们来一起学习 ...
- Power BI回顾于2025年
前段时间的工作主要是用Tableau和Tableau CRM,Power BI搁置了好一段时间.为了了解整个行业的趋势,偶尔也会回来看看Power BI这边的动静,毕竟自己当初就是从微软的技术路线开始 ...
- pytorch入门 - 微调huggingface大模型
在自然语言处理(NLP)领域,预训练语言模型如BERT已经成为主流.HuggingFace提供的Transformers库让我们能够方便地使用这些强大的模型. 本文将详细介绍如何使用PyTorch微调 ...
- 今天遇到了 X-Y PROBLEM
什么是X-Y 问题呢? 以下参考来自于耗子叔博客: 想解决问题X 他觉得Y可能是解决X的方法 但是他不知道Y应该怎么做 于是他去问别人Y应该怎么做? X-Y Problem 最大的严重问题就是:在一个 ...