Pandas绘图大揭秘:让你的数据比熊猫还萌,一秒变身数据界的‘萌主’!

在这里插入图片描述

1. Pandas绘图

  • Series和DataFrame都有一个用于生成各类图表的plot方法
  • Pandas的绘图时基于Matplotlib,可以快速实现基本图形的绘制,复杂的图形还是需要用Matplotlib
# 导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2. 折线图

2.1 Series图表

s = pd.Series([100,250,300,200,150,100])
s
s.plot()
<Axes: >

在这里插入图片描述

  • 画正弦曲线
# sin曲线
x = np.arange(0,2*np.pi,0.1)
x

y = np.sin(x)

s = pd.Series(data=y,index=x)
s

s.plot()
<Axes: >

在这里插入图片描述

2.2 DataFrame图表

  • 图例的位置可能会随着数据的不同而不同
data = np.random.randint(50,100,size=(5,6))
index =["1st","2nd","3th","4th","5th"]
columns = ["Jeff","Jack","Rose","Luck","Lily","Bob"]
df = pd.DataFrame(data=data,index=index,columns=columns)
df
JeffJackRoseLuckLilyBob
1st938166685678
2nd538084855651
3th665783626172
4th839882805082
5th537273735865
# 每一列一根线
df.plot()
<Axes: >

在这里插入图片描述

# 每一行一根线
df.T.plot()
<Axes: >

在这里插入图片描述

3. 柱状图和条形图

3.1 Series柱状图示例,kind = ‘bar’/‘barh’

s = pd.Series(data=[100,200,300,200])
s.index = ["Lily","Lucy","Jack","Rose"]
"""
kind : str
    The kind of plot to produce:

    - 'line' : line plot (default)
    - 'bar' : vertical bar plot
    - 'barh' : horizontal bar plot
    - 'hist' : histogram
    - 'box' : boxplot
    - 'kde' : Kernel Density Estimation plot
    - 'density' : same as 'kde'
    - 'area' : area plot
    - 'pie' : pie plot
    - 'scatter' : scatter plot (DataFrame only)
    - 'hexbin' : hexbin plot (DataFrame only)
"""
# 柱状图
s.plot(kind="bar")
<Axes: >

在这里插入图片描述

# 条形图
s.plot(kind="barh")
<Axes: >

在这里插入图片描述

df = pd.DataFrame(data=np.random.rand(10,4))
# 第一种方式
df.plot(kind="bar")
<Axes: >

在这里插入图片描述

# 第二种方式
df.plot.bar()
<Axes: >

在这里插入图片描述

# 是否堆叠
df.plot.bar(stacked=True)
<Axes: >

在这里插入图片描述

3.2 DataFrame柱形图示例

data = np.random.randint(0,100,size=(4,3))
index = list("ABCD")
columns = ["Python","NumPy","Pandas"]
df = pd.DataFrame(data=data,index=index,columns=columns)
df
PythonNumPyPandas
A777720
B207393
C69804
D64136
df.plot(kind="bar")
<Axes: >

在这里插入图片描述

df.plot(kind="barh")
<Axes: >

在这里插入图片描述

3.3 聚会规模可视化项目

  • 读取文件 tips.csv,查看每天各种聚会规模的比例
  • 求和 df.sum(),注意灵活使用 axis
  • df.div():获取数 DataFrame 和其他元素的浮点除法
tips = pd.read_csv("11_Pandas绘图_tips.csv")
tips
day123456
0Fri1161100
1Stat253181310
2Sun039151831
3Thur1484513

把day作为行索引

tips2 = tips.set_index("day")
tips2
123456
day
Fri1161100
Stat253181310
Sun039151831
Thur1484513

求每天的聚会规模

day_sum = tips2.sum(axis=1)
day_sum
day
Fri     19
Stat    87
Sun     76
Thur    62
dtype: int64

每天各种聚会规模的比例

tips3 = tips2.div(day_sum,axis=0)
tips3
123456
day
Fri0.0526320.8421050.0526320.0526320.0000000.000000
Stat0.0229890.6091950.2068970.1494250.0114940.000000
Sun0.0000000.5131580.1973680.2368420.0394740.013158
Thur0.0161290.7741940.0645160.0806450.0161290.048387
tips3.plot(kind="bar")
<Axes: xlabel='day'>

在这里插入图片描述

4. 直方图

4.1rondom生成随机百分比直方图,调用hist方法

  • 柱高表示数据的频数,柱宽表示各组数据的组距
  • 参数bins可以设置直方图方柱的个数上限,越大柱宽小,数据分组越细致
  • 设置density参数为True,可以把频数转换为概率
s = pd.Series([1,2,2,2,2,2,2,3,3,4,5,5,5,6,6])
s.plot(kind="hist")
<Axes: ylabel='Frequency'>

在这里插入图片描述

# bins=5 表示分为5组
s.plot(kind="hist",bins=5)
<Axes: ylabel='Frequency'>

在这里插入图片描述

# density:频数转换为概率
s.plot(kind="hist",bins=5,density=True)
<Axes: ylabel='Frequency'>

在这里插入图片描述

4.2 kde图:核密度估计,用于弥补直方图由于参数bins设置的不合理导致的精度缺失问题

# kde图:核密度估计
s.plot(kind="hist",bins=5,density=True)
# 可以结合上面的直方图一起显示,效果更好
s.plot(kind="kde")
<Axes: ylabel='Density'>

在这里插入图片描述

5. 饼图

  • 主要是用来描述占比
df = pd.DataFrame(data=np.random.rand(4,2),
                  index=list("ABCD"),
                  columns=["Python","Java"]
                 )
df
PythonJava
A0.5404950.100629
B0.8486050.101815
C0.3287140.361827
D0.3426020.757760
# 画饼图,autopct:显示百分比占比
df["Python"].plot(kind="pie",autopct="%.1f%%")
<Axes: ylabel='Python'>

在这里插入图片描述

# subplots:子图
df.plot.pie(subplots=True,figsize=(8,8))
array([<Axes: ylabel='Python'>, <Axes: ylabel='Java'>], dtype=object)

在这里插入图片描述

  • pandas画图:快速画简单的图
  • 复杂的图可以用matplotlib

6. 散点图

  • 散点图是观察两个一维数据列之间的关系有效方法,DataFrame对象可用
data = np.random.normal(size=(1000,2))
data

df = pd.DataFrame(data=data,columns=list("AB"))
df.head()
AB
0-0.2917591.550484
1-0.9359130.631661
2-0.8833160.040398
3-0.261854-0.745847
41.843412-0.794660
# 一般用于显示两列数据
df.plot(kind="scatter",x="A",y="B")
<Axes: xlabel='A', ylabel='B'>

在这里插入图片描述

# 方式二
# x="A":使用A列作为X轴
# y="B":使用B列作为Y轴
df.plot.scatter(x="A",y="B")
<Axes: xlabel='A', ylabel='B'>

在这里插入图片描述

7. 面积图

df = pd.DataFrame(data=np.random.rand(10,4),columns=list("ABCD"))
df
ABCD
00.0426260.5557090.5951400.283489
10.5102440.0660110.9518830.726001
20.6630380.7659640.9926620.083721
30.5482820.0054920.1754960.986480
40.6565530.2251310.1848480.810095
50.1160090.8953500.7481150.485771
60.5543340.5197590.6090960.392924
70.2213810.8828200.6441400.057933
80.9139840.6845860.3422340.686879
90.7595200.7215720.7809370.402259
df.plot(kind="area")
<Axes: >

在这里插入图片描述

# 堆叠
df.plot.area(stacked=True)
<Axes: >

在这里插入图片描述

8. 箱型图

df = pd.DataFrame(data=np.random.rand(10,4),columns=list("ABCD"))
df
ABCD
00.6777020.0666290.8548460.856027
10.1493470.7223140.0854580.902034
20.0109580.0355230.2869020.923202
30.8643280.9657600.6622810.774940
40.3068960.8664310.7204610.842470
50.5611300.3710320.0553050.304149
60.1577950.4733060.1523610.673328
70.1763090.5969000.9357710.399409
80.3289810.9164010.0754120.015534
90.5740440.3513020.7284650.227091
df.plot(kind="box")
<Axes: >

在这里插入图片描述

# 数据显示位置:最大值、75%、50%、25%、最小值
# 圆点:离群点表示异常值
df.plot.box()
<Axes: >

在这里插入图片描述

  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾飞开源

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值