Pandas可视化

  |  

摘要: 总结一下 Pandas 自带的可视化方法

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


Pandas 是数据分析工具,我们一般都会处理好处理数据然后使用 searbon 或 matplotlib 来进行绘制。对于一些简单的画图,Pandas 内部就已经集成了 matplotlib,本文就总结一下 Pandas 内部的画图方法。

方法和参数总览

方法

Pandas 目前支持的图表类型,也就是 df.plotseries.plot 下的方法,具体如下:

  • area: 面积图
  • line: 折线图
  • bar: 柱状图
  • barh: 条形图
  • box: 箱型图
  • density: 密度图
  • hexbin: 六边形箱体图
  • scatter: 散点图
  • hist: 直方图
  • kde: 密度图
  • pie: 饼图

参数

画图会涉及到一些图表元素,通过参数的方式设置,主要参数有以下这些:

  • 数据源选择: x="col1", y=["col2", "col3"]
  • 图大小: figsize=(10, 5)
  • 标题: title="标题"
  • 图例: legend="reverse"
  • 网格线: grid=True
  • 图颜色: color=["red", "pink"]
  • 边框颜色: edgecolor=["green"]
  • 字体大小: fontsize=20
  • 线条样式: style=[".-", "--", "*-"]
  • 色系: colormap="rainbow"
  • 并排绘制: rot=0
  • 堆叠绘制: stacked=0
  • 多子图: subplot=True
  • 绘图引擎: backend="matplotlib"

图表类型

面积图

面积图显示定量数据下面的区域面积。

1
2
3
4
5
df = pd.DataFrame({
'sales': [3, 3, 3, 9, 10, 6],
'signups': [4, 5, 6, 10, 12, 13],
'visits': [20, 42, 28, 62, 81, 50],
}, index=pd.date_range(start='2022/06/01', end='2022/12/01', freq='M'))

1
df.plot.area()

条形图

用矩形条显示分类数据。

1
2
3
4
df = pd.DataFrame({'lab': ['一', '二', '三']
,'val1': [10, 30, 20]
,'val2': [40, 15, 5]
})

竖直条形图

并排绘制(默认)

1
df.plot.bar(x="lab")

堆叠绘制

1
df.plot.bar(x="lab", stacked=True)

分图绘制

1
2
3
axes = df.plot.bar(x="lab", subplots=True)
axes[0].legend(loc=2)
axes[1].legend(loc=2)

水平条形图

用矩形条形表示定量数据。

1
df.plot.barh(x="lab")

箱线图

通过四分位数以图形方式描绘数值数据,框从数据的 Q1 到 Q3 四分位值延伸,在中位数 (Q2) 处有一条线。

1
2
3
4
age_list = [8, 10, 12, 14, 72, 74, 76, 78, 20, 25, 30, 35, 60, 85]
df = pd.DataFrame({"gender": list("MMMMMMMMFFFFFF")
,"age": age_list
})

1
df.plot.box(column="age")

分组绘制

1
df.plot.box(column="age", by="gender")

密度图

核密度估计 (KDE) 是一种估计随机变量的概率密度函数 (PDF) 的非参数方法。

1
2
3
4
df = pd.DataFrame({
'x': [1, 2, 2.5, 3, 3.5, 4, 5],
'y': [4, 4, 4.5, 5, 5.5, 6, 6],
})

1
ax = df.plot.kde()

六边形图

六边形图(hexbin)和热力图类似,颜色按照密度来进行展示,但形状使用六边形图代替。

1
2
3
n = 10000
df = pd.DataFrame({'x': np.random.randn(n),
'y': np.random.randn(n)})

1
ax = df.plot.hexbin(x='x', y='y')

直方图

直方图经常用于观察与频数统计相关的指标。

1
2
df = pd.DataFrame(np.random.randint(1, 7, 6000), columns = ['feature1'])
df['feature2'] = df['feature1'] + np.random.randint(1, 7, 6000)

1
ax = df.plot.hist(bins=12, alpha=0.5)

折线图

折线图经常用于时序数据。

1
2
3
df = pd.DataFrame({'pig': [20, 18, 489, 675, 1776]
,'horse': [4, 25, 281, 600, 1900]
}, index=[1990, 1997, 2003, 2009, 2014])

1
df.plot.line()

饼图

饼图经常用于观察与频数统计相关的指标。

1
2
3
df = pd.DataFrame({'mass': [0.330, 4.87 , 5.97]
,'radius': [2439.7, 6051.8, 6378.1]
}, index=['Mercury', 'Venus', 'Earth'])

1
df.plot.pie(y="mass")

按 index 分组

1
df.plot.pie(subplots=True, figsize=(11,6))

散点图

1
2
3
df = pd.DataFrame([[5.1, 3.5, 0], [4.9, 3.0, 0], [7.0, 3.2, 1]
,[6.4, 3.2, 1], [5.9, 3.0, 2]
], columns=['length', 'width', 'species'])

1
df.plot.scatter(x='length', y='width', c='DarkBlue')


Share