一篇文章带你搞定 Pandas 绘图 API

开发 后端
pandas除了数据处理还可以进行数据可视化展示,这里我们简单说明一下pandas绘制常见图形的一些API,使用pandas绘图其实并不多,这里做一个简单展示。

图片

对于从网页上爬取下来的数据很多很杂乱,我们需要进行数据可视化,pandas除了数据处理还可以进行数据可视化展示,这里我们简单说明一下pandas绘制常见图形的一些API:由于现在针对数据可视化有很多库,matplotlib、seaborn、pyecharts等等,使用pandas绘图其实并不多,这里做一个简单展示。

目录:

  • 柱状图
  • 饼图
  • 折线图
  • 散点图
  • 直方图

柱状图

普通柱图

首先我们打开excel数据文件,如下图所示:

图片

Field:专业;Number:对应专业学生数量,根据两列数据绘制简单柱图:

import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_excel('Students.xlsx')
# pd绘图
data.sort_values(by='Number',inplace=True,ascending=False)
data.plot.bar(x='Field',y='Number',title='National Students Field')

plt.tight_layout()
plt.show()

解释说明:

  1. Students.xlsx:对应的数据文件;
  2. data.sort_values(by='Number',inplace=True,ascending=False):按照Number数量大小排序,inplace = True:在当前数据文件上修改,不生成新的数据文件,ascending = False:降序排序;
  3. bar() 绘制柱图的函数,x、y分别指定下,x、y轴的序列;
  4. tight_layout() 使得整个图紧凑显示,不然x轴的文字由于太长会被挡住;

结果如下所示:

图片

分组柱图

首先我们还是查看数据文件:students02.xlsx

图片

给出了2016、2017两年的学生数量,由此考虑绘制分组柱状图:

import  pandas as pd
import matplotlib.pyplot as plt
data = pd.read_excel('Students02.xlsx')
data.sort_values(by='2017',inplace=True,ascending=False)
data.plot.bar(x='Field',y=['2016','2017'],color=['red','orange'])

plt.title('National Students Number',fontsize=16,fontweight='bold')
plt.xlabel('Field',fontweight='bold')
plt.ylabel('Number',fontweight='bold')
# x轴刻度偏转
ax = plt.gca()
ax.set_xticklabels(data['Field'],rotation=45,ha='right')
print(data)
f = plt.gcf()
f.subplots_adjust(left=0.2,bottom=0.4)
# plt.tight_layout()
plt.show()

解释说明:

  1. bar() 绘制柱图的函数,x、y分别指定下,x、y轴的序列,但是由于分组柱图y轴不再是一个序列,而是由两个(或多个)序列组成的列表;
  2. plt.title() 设置标题,当然也可以在bar() 函数里面设置;
  3. plt.gca() 获得x轴的文字,下一列重新设置x轴的文字,并且把文字旋转45°,ha='right':依照右点为中心进行水平对齐;
  4. plt.gcf() 拿到绘制的图形对象,设置留白区域,left=0.2(左侧留白20%),bottom=0.4,底部留白40%;

结果如下:

图片

叠加柱图

有的时候可能不只有两组数据,要观察多组数据的数量占比,可以采用叠加柱图:

import matplotlib.pyplot as plt 
import pandas as pd
data = pd.read_excel('./excel文件/Users.xlsx') # 这里数据文件就不再展示
data['total'] = data['Oct'] + data['Nov'] + data['Dec']
data.sort_values(by='total',inplace=True,ascending=False)
# data.plot.bar(x='Name',y=['Oct','Nov','Dec'],stacked=True,title='Users Behavior') 竖直
data.plot.barh(x='Name',y=['Oct','Nov','Dec'],stacked=True,title='Users Behavior') #水平 如果需要改变顺序,将ascending=true
plt.tight_layout()
plt.show()

结果如下图所示:

图片

饼图

首先我们先查看一下数据文件,如下所示:

图片

给出了2016,2017年来自不同国家的学生数量排名(rank);

由此绘制饼图:

import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(12,8),dpi=100)

students = pd.read_excel('./bin_Students.xlsx', index_col='From')

students['2017'].plot.pie(fontsize=8,counterclock=False)
plt.title('Source of International Students', fontsize=16, fontweight='bold')
plt.ylabel('2017', fontsize=12, fontweight='bold')
plt.show()

解释说明:

  1. figsize:设置图片大小,dpi:设置图片分辨率;
  2. pie()函数绘制饼图的的api函数,counterclock=False:这个参数设置饼图占比元素的环绕方向,false变送逆时针;

结果如下图所示:

图片

折线图

由于文件数据过多,这里不做展示;简言之就是四个区域的不同周期的销售状况

绘图代码:

import pandas as pd 
import matplotlib.pyplot as plt
data = pd.read_excel('./excel文件/Orders.xlsx',index_col='Week')
data.plot.area(y=['Accessories','Bikes','Clothing','Components']) #叠加区域图
plt.title('Sale Week Trend',fontsize=14,fontweight='bold')
plt.ylabel('Total',fontsize=10,fontweight='bold')
plt.xticks(data.index,fontsize=5)
plt.show()

结果如下:

图片

由于后面集中图形使用较少,这里不再展示数据文件,直接上代码:

散点图

import matplotlib.pyplot as plt 
import pandas as pd
data = pd.read_excel('./excel文件/home_data.xlsx',index_col='id')
data.plot.scatter(x='sqft_living',y='price') # 房子面积 价位
plt.show()

结果如下:

图片

该图形绘制的是在某地区房子价位与房子面积的分布关系;

直方图

import matplotlib.pyplot as plt 
import pandas as pd
data = pd.read_excel('./excel文件/home_data.xlsx')
data['sqft_living'].plot.hist(bins=60) # bins 表示柱子的数量
plt.xticks(range(0,max(data['sqft_living']),500),rotation=90,fontsize=6)
plt.show()

结果如下:

图片

该图表示某地区房子的价位的分布情况。

总结

以上就是使用pandas结合matplotlib绘制一些基本常用图形的例子,当然了例子是固定的,图形是灵活的,我们还是要根据不同的数据表,结合不同的现实状况,绘制不同的图形达到我们的目的。

责任编辑:庞桂玉 来源: Python共享之家
相关推荐

2020-02-28 11:29:00

ElasticSear概念类比

2021-05-15 10:16:14

Python匿名函数

2024-04-17 13:21:02

Python匿名函数

2021-03-06 10:05:03

Python函数变量

2021-11-10 09:19:41

PythonShutil模块

2022-03-30 10:51:40

JavaScript性能调优

2021-11-17 10:11:08

PythonLogging模块

2021-03-15 08:38:42

StringBuffeJava基础Java开发

2023-05-12 08:19:12

Netty程序框架

2022-02-21 09:44:45

Git开源分布式

2021-06-30 00:20:12

Hangfire.NET平台

2021-02-20 10:06:14

语言文件操作

2021-02-27 10:20:18

Go语言flag包开发技术

2021-05-31 08:59:57

Java数据库访问JDBC

2021-11-13 10:11:45

Pythonurllib库Python基础

2021-01-13 08:40:04

Go语言文件操作

2021-01-29 18:41:16

JavaScript函数语法

2021-07-01 10:01:16

JavaLinkedList集合

2020-11-10 10:48:10

JavaScript属性对象

2021-02-02 18:39:05

JavaScript
点赞
收藏

51CTO技术栈公众号