【6.0】Pandas绘图

发布时间 2023-09-24 16:48:44作者: Chimengmeng

【一】Pandas绘图

  • Pandas 在数据分析、数据可视化方面有着较为广泛的应用,Pandas 对 Matplotlib 绘图软件包的基础上单独封装了一个plot()接口,通过调用该接口可以实现常用的绘图操作。
    • 本节我们深入讲解一下 Pandas 的绘图操作。
  • Pandas 之所以能够实现了数据可视化,主要利用了 Matplotlib 库的 plot() 方法,它对 plot() 方法做了简单的封装,因此您可以直接调用该接口。
  • 下面看一组简单的示例:
  • 在使用 df.plot() 绘制DataFrame的时候,Jupyter Notebook中的输出会自动显示图形,但在其他Python环境中,需要使用 plt.show() 来显示图形。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 创建包含时间序列的数据
df = pd.DataFrame(np.random.randn(8, 4), index=pd.date_range('2/1/2020', periods=8), columns=list('ABCD'))
df.plot()

# 显示图形
plt.show()

pandas matplotlib

  • 如上图所示,如果行索引中包含日期,Pandas 会自动调用 gct().autofmt_xdate() 来格式化 x 轴。

  • 除了使用默认的线条绘图外,您还可以使用其他绘图方式,如下所示:

    • 柱状图:bar() 或 barh()

    • 直方图:hist()

    • 箱状箱:box()

    • 区域图:area()

    • 散点图:scatter()

  • 通过关键字参数kind可以把上述方法传递给 plot()。

【二】柱状图

【1】创建一个柱状图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
# 或使用df.plot(kind="bar")
df.plot.bar()
plt.show()

image-20230924153946247

【2】生成柱状堆叠图

  • 通过设置参数stacked=True可以生成柱状堆叠图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
df.plot(kind="bar", stacked=True)
# 或者使用df.plot.bar(stacked="True")
plt.show()

image-20230924154033297

【3】绘制水平柱状图

  • 如果要绘制水平柱状图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
print(df)
df.plot.barh(stacked=True)
plt.show()
          a         b         c         d
0  0.206361  0.883052  0.357841  0.183864
1  0.522382  0.333295  0.732108  0.845969
2  0.003440  0.999539  0.106514  0.116675
3  0.641142  0.274003  0.809550  0.409052
4  0.151516  0.646845  0.631517  0.718224
5  0.765353  0.463659  0.031836  0.410328
6  0.612120  0.626753  0.978856  0.291884
7  0.887875  0.677754  0.923422  0.640533
8  0.909638  0.099994  0.012314  0.217578
9  0.664750  0.980422  0.446866  0.246213

image-20230924154120613

【三】直方图

  • plot.hist() 可以实现绘制直方图,并且它还可以指定 bins(构成直方图的箱数)。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame({'A': np.random.randn(100) + 2, 'B': np.random.randn(100), 'C':
    np.random.randn(100) - 2}, columns=['A', 'B', 'C'])
print(df)
# 指定箱数为15
df.plot.hist(bins=15)
plt.show()
           A         B         C
0   0.932241  0.613884 -1.782551
1   1.176741  1.986815 -2.293783
2   1.779891 -1.010581 -2.091620
3   3.647378  0.419567 -1.185410
4   4.215329 -0.436417 -2.658204
..       ...       ...       ...
95  1.985154  0.902845 -3.010176
96  1.611433 -0.678580 -2.922049
97  0.780115  0.330687 -0.421953
98  2.688825  0.717411 -1.943388
99  1.636895  0.444966 -1.473589

[100 rows x 3 columns]

image-20230924154309171

  • 给每一列数据都绘制一个直方图,需要使以下方法
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame({'A': np.random.randn(100) + 2, 'B': np.random.randn(100), 'C':
    np.random.randn(100) - 2, 'D': np.random.randn(100) + 3}, columns=['A', 'B', 'C', 'D'])
# 使用diff绘制
df.diff().hist(color="r", alpha=0.5, bins=15)
plt.show()

image-20230924154347977

【四】箱型图

  • 通过调用 Series.box.plot() 、DataFrame.box.plot() 或者 DataFrame.boxplot() 方法来绘制箱型图,它将每一列数据的分布情况,以可视化的图像展现出来。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10, 4), columns=['A', 'B', 'C', 'D'])
df.plot.box()
plt.show()

image-20230924154441771

【五】区域图

  • 您可以使用 Series.plot.area() 或 DataFrame.plot.area() 方法来绘制区域图。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(5, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()
plt.show()

image-20230924154616811

【六】散点图

  • 使用 DataFrame.plot.scatter() 方法来绘制散点图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(30, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')
plt.show()

image-20230924154701376

【七】饼状图

  • 饼状图可以通过 DataFrame.plot.pie() 方法来绘制。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(3 * np.random.rand(4), index=['go', 'java', 'c++', 'c'], columns=['L'])
df.plot.pie(subplots=True)
plt.show()

image-20230924154745997