pandas 数据分析4:绘图1(图表可视化)

pandas 可视化

绘图的目的是数据的可视化,数据的可视化是数据操作的重要方案。

特别是面对庞大众多的数据,尽管分组聚合还是其他什么方法能够得到数据的总体概览,但是都不能直观地显示出来。

绘图使得可视化就是要:展示数据的变化规律或是关联性,以及实际需求的一些特性表现情况

图表可视化

限于篇幅,这里尽可能全面地包含图表可视化的众多方案。更多请参阅表格数据的可视化部分。

标准地引用 matplotlib API,后面的 plt 表意皆为此:

import matplotlib.pyplot as plt
plt.close("all")

基本绘图 - 两大构型的 plot 方法

SeriesDataFrame 上的 plot 方法只是一个基于 plt.plot() 的简单封装。

下面引用两个实例简要说明:

Series.plot()

ts1 = pd.Series(np.random.randn(500), index=pd.date_range("20200101", periods=500))
ts1 = ts.cumsum()  # 累和
ts1.plot()

在这里插入图片描述

  • 如果索引由日期组成,它会调用 gcf().autofmt_xdate() 格式化 x 轴。

DataFrame.plot()

DataFrame.plot() 可以很轻便地绘制所有列:

df2 = pd.DataFrame(np.random.randn(500, 4), index=ts1.index, columns=list("ABCD"))
df2 = df2.cumsum()
plt.figure();
df.plot();

在这里插入图片描述

  • 可以使用 DataFrame 中的某行作为横坐标,通过参数 x 指定.;
  • 也可以通过参数 y 指定需要绘制的列,如下。
df3 = pd.DataFrame(np.random.randn(500, 4), index=ts.index, columns=list("ABCD"))
df3["range"] = pd.Series(list(range(500)), index=df3.index)
df3.plot(x="range", y=["A", "C"])

在这里插入图片描述

更多格式化和样式选择,参阅 Python 数据分析4:pandas绘图6(图表格式化)

注意

  • 基本的图形,两大数据构型的方法都能够进行绘制;一些特别的如散点图,只有阵列结构的 DataFrame 才能绘制。
  • 绘制的方法和样式是复杂多样的。

更多图型绘制

DataFrame.plot() 可以传入多个关键字参数,可以实现复杂的绘制(各类图形、子图、分图等等)。

其中 kind 参数可以选择绘图图的类型,默认是 ‘line’,即线型图。

另一种方案是: DataFrame.plot.kind(),其中 kind 是可以作为 kind 参数的任意值。所以下面两句话是等价的。

df3.iloc[5].plot(kind="bar")
df3.iloc[5].plot.bar()

pandas.plotting 中还有一些绘制的函数,它们以 Series or DataFrame 作为数据参数传入,包括但不限于:

bar - 条形图

基本绘制:

  1. 对于一条 Series 数据:
df3.iloc[5, 0:4].plot(kind="bar")  # df3.iloc[5, 0:4].plot.bar()

在这里插入图片描述

  1. 对于 DataFrame ,只是变得多条而已:
df4 = pd.DataFrame(np.random.randn(10, 4), columns=list("ABCD"))
df4.iloc[:, 0:4].plot.bar()

在这里插入图片描述

  1. 一个常见的简单格式:堆叠。通过设置参数 stacked=True 实现。
df4.iloc[:, 0:4].plot.bar(stacked=True);

在这里插入图片描述

barh - 水平条形图

就是由垂直视图变到水平:

df4.iloc[:, 0:4].plot.barh(stacked=True);

在这里插入图片描述

histograms - 直方图

直方图也称分布图。

  1. 基本绘制
df5 = pd.DataFrame(
    {
        "a": np.random.randn(1000) + 1,
        "b": np.random.randn(1000) - 1,
    },
    columns=["a", "b"],
)
df5.plot.hist(alpha=0.6)

在这里插入图片描述

  1. 条形的宽度(带宽):通过 bins 参数进行设置。
df5.plot.hist(alpha=0.6, bins=20, stacked=True)

在这里插入图片描述

  1. 另一种绘制直方图的方案:DataFrame.hist()
df.hist()
df["a"].hist()  # 单画一个 Series

在这里插入图片描述

box - 箱线图

箱线图(Box-plot)又称为盒须图、盒式图,用作显示一组数据分散情况资料,因形状如箱子而得名,常见于品质管理。主要用于反映原始数据分布的特征。

在这里插入图片描述

  1. 基本绘制

使用 Series.plot.box()DataFrame.plot.box()DataFrame.boxplot() 可视化:每列内的值分布。

下面一个实例,使用箱线图展示了,五次 [0,1) 上的 10 个随机变量获取情况。

df6 = pd.DataFrame(np.random.rand(10, 5), columns=["A", "B", "C", "D", "E"])
df6.plot.box()
# df6.boxplot()  # 默认有水平线

在这里插入图片描述

  1. 通过设置 color 改变线条颜色。线条大致四种,即 boxeswhiskersmedianscaps,所以 color 作为一个字典传入。
  2. 通过设置 `sym`` 参数改变异常数据的样式。
color = {
    "boxes": "DarkGreen",		# 箱子轮廓线
    "whiskers": "DarkOrange",	# 胡须线
    "medians": "DarkBlue",		# 中线
    "caps": "Gray",				# 帽子线
}
df6.plot.box(color=color, sym="r+");

../_images/box_new_colorize.png

  1. 通过参数 vert=False 设置水平视图;通过参数 positions=[1, 4, 5, 6, 8] 设置位置与间隔。
df6.plot.box(vert=False, positions=[1, 4, 5, 6, 8])

在这里插入图片描述

area - 面积图

  1. 基本绘制
df7 = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])
df7.plot.area()

在这里插入图片描述

  • NaN 自动被 0 填充,如果需要,可以提前使用 Dataframe.dropna() or Dataframe.fillna() 进行销毁或者填值。
  • 面积图默认 stacked=True ,即默认堆叠。
  1. 设置不堆叠时,参数 alpha 默认是 0.5。
df7.plot.area(stacked=False)  # alpha default value is 0.5

在这里插入图片描述

scatter - 散点图

  1. 基本绘制

散点图常表示两条(一对)数据的关联性,只有阵列结构的 DataFrame 有绘制接口。横纵轴必须是两列数字类型,使用参数 xy 进行设置。

df8 = pd.DataFrame(np.random.rand(50, 4), columns=["a", "b", "c", "d"])
df8.plot.scatter(x="a", y="b")

在这里插入图片描述

  1. 在一张坐标纸上绘制多对数据的散点图:绘制第 N 对时,通过设置参数 ax 修改。
ax = df.plot.scatter(x="a", y="b", color="DarkBlue", label="Group 1")
df.plot.scatter(x="c", y="d", color="DarkGreen", label="Group 2", ax=ax)

在这里插入图片描述

  1. 颜色条:通过参数 c 进行配置
  2. 散点大小:通过参数 s 进行修改。
df8["species"] = pd.Categorical(
    ["setosa"] * 20 + ["versicolor"] * 20 + ["virginica"] * 10
)
df8.plot.scatter(x="a", y="b", c="c", s=50)
# df8.plot.scatter(x="a", y="b", c="species", s=50)  # 离散颜色条

在这里插入图片描述

hexbin - 六边形图

Hexagonal bin plots.

  1. 基本绘制
df9 = pd.DataFrame(
    {
        "A": pd.Series(np.random.rand(1000)),
        "B": pd.Series(np.arange(1000)), 
    }
)
df9.plot.hexbin(x="A", y="B", gridsize=25)

在这里插入图片描述

  • 如果您的数据过于密集,以至于无法单独绘制每个点,那么 Hexbin 图可以成为散点图的有用替代方法。
  • 和散点图一样,只有 DataFrame 才有接口。
  1. 控制网格大小的参数 gridsize:控制格子数,默认值是 100,值越大,格子越多且越小。
df9.plot.hexbin(x="A", y="B", gridsize=125)

在这里插入图片描述

pie - 扇形图

  1. 基本绘制
series = pd.Series(3 * np.random.rand(4), index=["a", "b", "c", "d"], name="series")
series.plot.pie(figsize=(6, 6))

在这里插入图片描述

  • 数据中的 NaN 自动用 0 进行填充。
  • 数据中有负数报错 ValueError
  • 最好选择方形的画布。
  1. DataFrame 绘制扇形图时,每列都能绘制一个:把子图参数设置 subplot=True
  2. 通过设置 legend=False 把旁边的图例隐藏。
df10 = pd.DataFrame(
    3 * np.random.rand(4, 2), index=["a", "b", "c", "d"], columns=["A", "B"]
)
df10.plot.pie(subplots=True, figsize=(8, 4))
# df10.plot.pie(subplots=True, figsize=(8, 4), legend=False)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值