上篇继续,做数据分析,各种数据图表是必不可少的,还是以下面这张表为例:

一、单列柱状图

假设要把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)-数据图表的更多相关文章

  1. 【转】Pandas学习笔记(二)选择数据

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  2. @1-5使用pandas保存豆瓣短评数据

    使用pandas保存豆瓣短评数据 Python爬虫(入门+进阶)     DC学院 本节课程的内容是介绍open函数和pandas两种保存已爬取的数据的方法,并通过实际例子使用pandas保存数据. ...

  3. 【转】Pandas学习笔记(七)plot画图

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  4. 【转】Pandas学习笔记(六)合并 merge

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  5. 【转】Pandas学习笔记(五)合并 concat

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  6. 【转】Pandas学习笔记(四)处理丢失值

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  7. 【转】Pandas学习笔记(三)修改&添加值

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  8. 【转】Pandas学习笔记(一)基本介绍

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  9. 实操 | 内存占用减少高达90%,还不用升级硬件?没错,这篇文章教你妙用Pandas轻松处理大规模数据

    注:Pandas(Python Data Analysis Library) 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.此外,Pandas 纳入了大量库和一些标准的数据模型 ...

  10. pandas库笔记

    本笔记为自学笔记 1.pandas.DataFrame() 一种保存矩阵的数据格式 grades_df = pd.DataFrame( data={'exam1': [43, 81, 78, 75, ...

随机推荐

  1. 信息资源管理综合题之“LJ集团的知识库和员工离职客户流失问题”

    一.集团是北京的一家规模巨大的房地产投资公司,早在15年前,该公司出现了如下几个问题:每个业务员手上的客户资料,其他人无法得知,从而导致员工离职时会流失大量潜在客户:业务员繁忙的时候,无法满足客户用户 ...

  2. 【JavaScript的加减乘除,解决小数准确度缺失问题】

    加 /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. ** 调用:accAdd(a ...

  3. Java 原生异步编程与Spring 异步编程 详解

    简介 Java 异步编程是现代高性能应用开发的核心技术之一,它允许程序在执行耗时操作(如网络请求.文件 IO)时不必阻塞主线程,从而提高系统吞吐量和响应性. 异步 vs 同步 同步:任务按顺序执行,后 ...

  4. 202402 湖北武汉 4D3N3P

    202402 湖北武汉 4D3N3P D0 / 10 杭州出发 普速列车25T Z47 杭州-武昌 城站22:22开 第3候车室 这趟列车是武汉局"华东三直"中的其中一列,另外两列 ...

  5. 第2讲、Tensor高级操作与自动求导详解

    1. 前言 在深度学习模型中,Tensor是最基本的运算单元.本文将深入探讨PyTorch中两个核心概念: Tensor的广播机制(Broadcasting) 自动求导(Autograd)机制 这些知 ...

  6. 【2020.12.02提高组模拟】球员(player) 题解

    [2020.12.02提高组模拟]球员(player) 题解 题意描述 基本的递推. ①所有运动员姓氏的长度必须不同. ②每个运动员的姓氏必须是长度比其长的所有其他运动员姓氏的连续子串 潜在的球员分成 ...

  7. [SWPUCTF 2021 新生赛]finalrce

    <?php highlight_file(__FILE__); if(isset($_GET['url'])) { $url=$_GET['url']; if(preg_match('/bash ...

  8. python中的split()函数

    Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串 a,b,c=input().split(,) 意思是在a,b,c三个输入值直接 ...

  9. 数据库的DML与DQL语句

    1: DML语句 ​ insert into values 1 insert into 表 values(值1,值2,值n); 2 insert into 表(字段1,字段2,字段n) values( ...

  10. c++ 预处理 编译 链接 文件组织形式

    -- 整体流程 C++ 源文件 (.cpp) ↓ 预处理(展开头文件.宏替换等) 预处理后的代码 (.i) ↓ 编译(编译器) 汇编代码 (.s) ↓ 汇编(汇编器) 目标文件 (.o / .obj) ...