Pandas系列目录
Pandas数据提供了方便的绘图函数,可以直接调用绘图。不仅包括常用的点、线、柱形图、饼图,还包括直方图、核密度曲线图等统计图形。
Pandas的绘图函数基于Matplotlib。
Pandas系列将Pandas的知识和重点API,编制成思维导图和重点笔记形式,方便记忆和回顾,也方便应用时参考,初学者也可以参考逐步深入学习。
Pandas数据可视化有两种途径
方法一:通过数据(Series或DataFrame)的plot属性调用绘图函数。
# 导入库
import pandas as pd
import matplotlib.pyplot as plt
# 初始化数据
d=pd.DataFrame({'x':[-3,-2,-1,0,1,2,3]})
d['y']=d['x']**2
# 绘图
d.plot.line(x='x', y='y') #调用plot模块的line方法绘制折线图
# 显示
plt.show()
显示图形结果如下:
方法二:直接调用plot函数
# 导入库
import pandas as pd
import matplotlib.pyplot as plt
# 初始化数据
d=pd.DataFrame({'x':[-3,-2,-1,0,1,2,3]})
d['y']=d['x']**2
# 绘图
d.plot(x='x', y='y', kind="line") #调用plot函数绘图,指定图形类别为折线图
# 显示
plt.show()
效果与方法一完全相同。
np.random.seed(20211231)
x=np.arange(5)
y=np.random.randint(10,size=5)
d=pd.DataFrame({'x':x,'y':y})
d.plot.scatter(x='x',y='y')
d.plot.line(x='x',y='y')
d.plot.area(x='x',y='y')
d.plot.bar(x='x',y='y')
d.plot.barh(x='x',y='y')
d.plot.pie(y='y')
plt.show()
显示效果如下:
1)Series数据绘图
Series不支持scatter函数,即不能用Series绘制散点图。英文散点图必须有x,y坐标。
Series数据调用绘图函数时,不用指定x,y数据,默认把Series数据作为y坐标数据,用自然数[0,1,2,...]
作为x坐标数据
示例:
s=pd.Series([1,2,3,4,5])
s.plot.line()
s.plot.area()
s.plot.bar()
s.plot.barh()
s.plot.pie()
plt.show()
2) scatter函数特殊性
scatter函数必须同时指定x,y坐标。且x,y坐标长度必须相同
df.plot(x=['col1','col2'], y=['col3','col4'])
:多个数据列绘制散点图
仅scatter和hexbin函数支持这样为x,y参数赋值,其他绘图函数都不支持这样使用。
多个数据列绘制的散点图,仍是同一个散点序列。并不能像折线图一样,两个数据列得到两根线。scatter绘制多列数据与其他函数都不同。与线条等图形相比,不同的数据列表示不同的线条,但是散点图没有这个概念,所有的散点都是同一个序列的。所以,同一个图形中可以绘制多条曲线,但是在散点图中不论多少个数据列,都合并为一个散点序列。
scatter函数支持的所有数据参数调用方式:
df.plot.scatter(x='col1', y='col2')
df.plot.scatter(x=['col1','col1'], y=['col2','col3'])
2) pie函数特殊性
pie只需要指定y参数,不需要指定x参数。饼图的标签采用数据的行标签。
y=['col1','col2']会出错
df=pd.DataFrame({'col1':[1,2,3,4],'col2':[2,3,2,4],'col3':[3,1,2,1.5]},index=['a','b','c','d'])
df.plot.pie(subplots=True,layout=(2,2))
pie函数支持的所有数据参数调用方式:
df.plot.pie(y='col1')
df.plot.pie(subplots=True)
3)line、area、bar、barh共同特点
这几个函数x,y参数都支持这几种用法:
注意x参数不能是列表。
- x,y均可以省略
- x默认值为0,1,2…自然是序列
- y默认值为除x外,其他所有列组成的列表
x,y都省略时,对每列数据绘图
多个序列绘图效果如下:
stacked叠加绘图参数
注意上图中area的图形和line的图形不太一样,这是为什么呢?area的stacked参数默认为True,即叠加绘图。第2列数据的y坐标会与前一列的坐标值相加后显示。效果如下:
注意:
- area默认stacked为True,其他函数默认为False
- line和area的stacked设置为True时,y值必须大于等于0
子图绘制
默认情况下多个列的数据绘制线、柱都在一个图形中。可以通过subplots参数将各个列数据分开在不同的子图中绘图。
以df.plot.bar(x='col1',subplots=True)
为例,效果如下:
在subplots=True时,可以用layout=(2,3)参数设置子图的行列数(2行3列)。
直方图、密度分布图、箱型图、六边形填充图。
直方图:用柱形图显示数据分布密度。
核密度分布图:用指定的核密度函数(数据假定或已知的分布函数)拟合直方图。
箱型图:用一个箱型框显示一列数据的最小值,25%分位值,中位数,75%分位值,最大值。
六边形填充图:在x,y坐标处绘制平面六边形,用六边形颜色表示x,y坐标出现的次数
直方图
直方图,stacked为False和True的效果:
density、kde两个方法完全相同,用于核密度估计。采用非参数方法估算随机变量的概率密度函数(用函数使用高斯核)
d=pd.Series([1,1,1,2,3,4])
d.plot.kde()
s=pd.Series([1,2,3,4,5])
df=pd.DataFrame(np.random.random((50,4)))
s.plot.box()
df.plot.box()
与scatter相似。Series不支持hexbin。x,y参数也都不能省略,x,y都为列表时,长度必须相同。
n = 10000
df = pd.DataFrame({'x': np.random.randn(n),
'y': np.random.randn(n)})
ax = df.plot.hexbin(x='x', y='y', gridsize=20)
hexbin绘图建议设置gradsize,否则六边形图很小,且间距很大,视角效果不好
特点:与plot模块等效,通过kind参数指定绘图方法。其他参数完全相同
DataFrame可以直接调用hist和boxplot函数。直接调用函数,相比plot模块和plot函数,多一个column参数。
在调用绘图函数时,还可以设置一些其他参数,调整绘图效果,这些参数是通用的。形式如下:
d.plot(x='x',y='y',kind='line',title='title',xlim=(1,5))
figsize=(4,3)
:图形宽高分别设置为4,3title='title1'
:设置图形标题,用列表为每个子图设置标题ax=ax1
:图形绘制到axes对象上ax1style=['r:','-']
:为每列数据指定样式。(r:表示红色虚线,-表示实线)fontsize=10
:xticks的字体大小legend=False
:是否显示图例xlim=(1,5)
:设置x轴坐标上下限ylim=(1,5)
:设置y轴坐标上下限xticks=[1,2,3,4]
:设置x轴坐标yticks=[1,2,3]
:设置y轴坐标xlabel='x'
:设置x轴标签ylabel='y'
:设置y轴标签logx=True
:坐标轴是否按对数坐标轴绘制logy=True
:坐标轴是否按对数坐标轴绘制Pandas系列目录
个人总结,部分内容进行了简单的处理和归纳,如有谬误,希望大家指出,持续修订更新中。
修订历史版本见:https://github.com/hustlei/AI_Learning_MindMap
未经允许请勿转载。