【6.0】Pandas绘图
【一】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 会自动调用 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()
【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()
【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
【三】直方图
- 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]
- 给每一列数据都绘制一个直方图,需要使以下方法
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()
【四】箱型图
- 通过调用 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()
【五】区域图
- 您可以使用 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()
【六】散点图
- 使用 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()
【七】饼状图
- 饼状图可以通过 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()
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17726183.html