pandas数据分析之绘图方法详解

之前介绍过matplotlib plot方法的详细用法,今天来介绍一下pandas中绘图方法,pandas中封装的绘图方法本质上还是调用了matplotlib的绘图方法。

  • 基础绘图方法plot,pandas中Series和DataFrame的plot方法是包装自matplotlib的plot方法
# Series绘图
ts = pd.Series(
    np.random.randn(1000),
    index=pd.date_range('1/1/2000', periods=1000)
)
# cumsum累加求和,并保留累加的中间结果
ts = ts.cumsum(axis=0)
ts.plot()

  • 对DataFrame调用plot函数,会将各个属性的名称设置为labels
df = pd.DataFrame(
    np.random.randn(1000, 4),
    index=ts.index,
    columns=["A", "B", "C", "D"]
)
df = df.cumsum(axis=0)
df.plot()

 

  • DataFrame调用plot函数时,可以通过指定x和y参数来绘制两个属性之间的关系
df3 = pd.DataFrame(
    np.random.randn(100, 2),
    columns=["B", "C"]
)
df3["A"] = pd.Series(list(range(len(df3))))
"""
    参数解释:详见matplotlib plot函数参数解释
    x:横轴数据
    y:纵轴数据
    color绘图颜色
    linestyle:线条样式
    linewidth:线条宽度
    figsize:绘图大小
    legend:是否显示图例
    logy:是否对y轴数据进行log变化,控制数值范围
"""
df3.plot(x="A", y="B", color="b", linestyle="-", linewidth=2, figsize=(10,10), legend=True, logy=True)

绘制线形图以外的其他图像时,可以通过plot函数的kind参数控制图像样式:

  • ‘bar’ or ‘barh’ for bar plots -> 条形图(竖直或水平)
  • ‘hist’ for histogram -> 柱状图
  • ‘box’ for boxplot -> 箱型图
  • ‘kde’ or ‘density’ for density plots -> 密度图
  • ‘area’ for area plots -> 面积图
  • ‘scatter’ for scatter plots -> 散点图
  • ‘hexbin’ for hexagonal bin plots -> 六角本图
  • ‘pie’ for pie plots -> 饼图

1)、kind="bar"条形图(竖直)

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

2)、kind="barh"条形图(水平)

df.iloc[5].plot(kind="barh")
print(df.iloc[5])

3)、除了使用plot的kind参数指定绘图样式,也可以直接使用plot.的形式指定绘图样式

# 绘制条形图
df.iloc[5].plot.bar()

  • 绘制条形图DataFrame.plot.bar()
df.iloc[5].plot.bar()
plt.axhline(0, color='b');

df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()

# 将条形图进行堆叠
df2.plot.bar(stacked=True)

# 绘制水平条形图
df2.plot.barh(stacked=True)

  • 绘制柱状图DataFrame.plot.hist()
df = pd.DataFrame(
    {
        "a": np.random.randn(1000) + 1,
        "b": np.random.randn(1000),
        "c": np.random.randn(1000) - 1
    },
    columns=["a", "b", "c"]
)
# alpha参数控制图像的透明度
df.plot.hist(alpha=0.5)

# 柱状图堆叠,并指定柱状图的分箱数
#  bins参数控制统计区间的大小
df.plot.hist(stacked=True, bins=20)

# 也可以使用matplotlib库hist方法提供的关键字参数
df.plot.hist(orientation="horizontal", cumulative=True)

# 除了通过df.plot.hist方式进行调用,DataFrame也有hist方法
# DataFrame的hist方法使用多个子图分别绘制DataFrame的column
df.hist(bins=20)

s = pd.Series([1,3,4,6,7,9])
# diff函数用来判断属性的每个值与指定数值的差距,默认的指定数值为前一行的数值内容
s.diff().hist()

# DataFrame的hist方法可以使用by参数来定义分组
data = pd.Series(np.random.randn(1000))
# np.random.randint(0, 4, 1000)随机生成1000个0-3之间的数字,然后将这些数字进行分组,并将与之对应的data数据绘制直方图
data.hist(by=np.random.randint(0, 4, 1000), figsize=(6, 4))
pd.Series(np.random.randint(0, 4, 1000)).value_counts()

  • 绘制箱型图DataFrame.plot.box() 

箱型图简介: 
(1)计算上四分位数(Q3),中位数,下四分位数(Q1) 
(2)计算上四分位数和下四分位数之间的差值,即四分位数差(IQR,interquartile range)Q3-Q1 
(3)绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线。 
(4)大于 上四分位数 1.5倍四分位数差 的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值(outliers)。 
(5)异常值之外,最靠近上边缘和下边缘的两个值处,画横线,作为箱线图的触须。 
(6)极端异常值,即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍-3倍四分位数差之间的异常值,用空心点表示。 
(7)为箱线图添加名称,数轴等

df = pd.DataFrame(np.random.randn(10, 5), columns=["A", "B", "C", "D", "E"])
# 绘制所有数值属性的箱线图
df.plot.box()

# 绘制单独一个属性的箱线图
df["A"].plot.box()

df.boxplot()

# 设置箱线图的颜色
color = {'boxes': 'DarkGreen', 'whiskers': 'DarkOrange', 'medians': 'DarkBlue', 'caps': 'Gray'}
# sym指定异常值的样式
df.plot.box(color=color, sym='r+')

  • 绘制面积图DataFrame.plot.area() 

面积图的意义:堆积面积图是一种特殊的面积图,可以用来比较在一个区间内的多个变量。堆叠面积图和面积图的区别在于,堆叠面积图每个数据系列的起点都是基于前一个数据系列绘制的(堆叠面积图要求一列数据要么全为正,要么全为负),也就是每度量一行就要填满行与行之间的区域。如果有多个数据系列,并想分析每个类别的部分到整体的关系,并展现部分量对于总量的贡献时,使用堆积面积图是非常合适的选择。

df = pd.DataFrame(np.random.rand(10, 4), columns=["A", "B", "C", "D"])
df["B"] = df["B"] * -1.0
# 绘制的面积图默认是堆叠的形式,堆叠面积图要求同一个特征的数值要么全为正,要么全为负
df.plot.area()
df.loc[0].sum() - df.loc[0, "B"], df.loc[0, "B"], df.loc[9].sum() - df.loc[9, "B"], df.loc[9, "B"]
(1.2377821011551786, -0.3169154766752843, 1.9799948518694093, -0.7935035073522937)

df.loc[0:5, "B"] = df.loc[0:5, "B"] * -1.0
df.plot.area(stacked=False)

  • 绘制散点图DataFrame.plot.scatter() 

散点图要求属性是数值型的。

df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x="a", y="b")
# 在一个axes中绘制多个散点图
# 获取画布的句柄,指定绘制的颜色,标记样式
ax = df.plot.scatter(x="a", y="b", color="r", marker=".", figsize=(10, 8), s=50)
# 指定画布,颜色,标记样式,用来区分不同的数据
df.plot.scatter(x="c", y="d", ax=ax, color="b", marker="^")
df.plot.scatter(x="a", y="c", ax=ax, color="k", marker="<")

# 使用关键字c来为每个数据点设置不同的颜色,通常用来显示两个变量(x,y)的共同作用对第三个变量c的影响
df.plot.scatter(x='a', y='b', c='c', s=50)

  • 不同绘图方法的缺失值处理方法

  • 绘制散点图矩阵pandas.plotting.scatter_matrix
from pandas.plotting import scatter_matrix

# 使用scatter_matrix绘制所有特征组合之间的散点图,并指定对角线上的显示样式密度kde或柱状图hist
df = pd.DataFrame(np.random.randn(1000, 4), columns=['a', 'b', 'c', 'd'])
scatter_matrix(df, alpha=0.2, figsize=(8, 8), diagonal="hist")

  • 绘制密度图DataFrame.plot.kde()
df.plot.kde(legend=True)

 

参考:pandas官网 pandas CookBook

道阻且长,加油吧,少年!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值