版权声明:未经博主本人同意,请勿私自转发分享。 https://blog.csdn.net/Nerver_77/article/details/85279895
4. 绘图可视化之Matplotlib
写在开头,matplotlib
是 可用于Python脚本
,Python
和IPython shell
,Jupyter
,Web应用程序
の可视化 2D绘图库
。
-
Matplotlib Architecture(架构简述)
Backend
:图表显示位置的控制Artist
:图表显示样式Scripting
:pyplot等语法API进行绘图
-
主要方法:plot()
-
show()
import numpy as np import matplotlib.pyplot as plt a = [1,2,3] plt.plot(a) plt.show() # 在jupyter中可采用下述 magic func 减少show()方法的重复使用
-
magic function:IPython中将任何第一个字母为%的行视为Magic函数的特殊调用,可以控制IPython,为其增加许多系统功能。
%matplotlib inline
:可以在Ipython编译器里直接使用,功能是可以内嵌绘图,并且可以省略掉plt.show()
这一步操作。%timeit
:对于任意语句,它会自动多次执行以产生一个非常精确的平均执行时间。
-
plot()相关属性举例
# 准备数据 t = np.arange(0.0, 2.0, 0.1) s = np.sin(t*np.pi) # plot()绘图 label为该图表线标签,于legend()控制label是否展示 # 'b--':代表蓝色,线style为 -- plt.plot(t, s, 'b--',label='aaaa') plt.plot(t*2, s ,'r--',label='bbbb') # 添加坐标轴标签 plt.xlabel('this is x') plt.ylabel('this is y') plt.legend()
更多API用法请见:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html?highlight=plot#module-matplotlib.pyplot -
-
subplot(line, column, position)
-
分模块区域画图
# subplot()切换子图(行,列,位置) # 模块1 plt.subplot(2, 2, 1) plt.plot(x, y1, 'b--', label='sin(x*pi)') plt.ylabel('y1 value') # 模块2 plt.subplot(2, 2, 2) plt.plot(x, y2, 'r--', label='sin(x*pi)') plt.ylabel('y2 value') # 模块3 plt.subplot(2, 2, 3) plt.plot(x, y2, 'r*', label='sin(x*pi)') plt.ylabel('y1 value') # 模块4 plt.subplot(2, 2, 4) plt.plot(x, y1, 'b*', label='sin(x*pi)') plt.ylabel('y1 value')
-
subplots()
:方法会返回画图对象和坐标对象ax,figsize是子图长宽信息figure, ax = plt.subplots(2,2) # 分别在[0][0] 和 [1][1] 区域绘图 ax[0][0].plot(x, y1, 'b--') ax[1][1].plot(x, y2, 'g--')
-
写在开头,Series以及DataFrame均含有plot()
方法进行绘图,API相关如下:
Series.plot():http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.plot.html#pandas.Series.plot
Series.plot(kind='line', ax=None, figsize=None, use_index=True, title=None, grid=None,
legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None,
xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None,
xerr=None, label=None, secondary_y=False, **kwds)
DataFrame.plot():http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None,
sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None,
legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None,
xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None,
xerr=None, secondary_y=False, sort_columns=False, **kwds)
-
Series绘图
# 累加和 s1 = Series(np.random.randn(10)).cumsum() s2 = Series(np.random.randn(10)).cumsum() # 绘图 s1.plot(kind='line', label='S1', title='this is a series', grid=True) s2.plot(label='S2',grid=True) plt.legend()
# 通过子图绘制多个图表 fig, ax = plt.subplots(2, 1) ax[0].plot(s1) ax[1].plot(s2)
-
DataFrame绘图
# 构造数据框 df = DataFrame( np.random.randint(1,10,40).reshape(10,4), columns=['A','B','C','D'] ) # 默认按列画图 [横向柱状图、使用堆叠效果] df.plot(kind='barh', stacked=True)
# 快速按行画图,转置数据框后操作 df.T.plot() # 循环按行画图 for i in df.index: df.iloc[i].plot(label=str(i)) plt.legend() plt.show() # 效果同上
# 按照某一列画图 df['A'].plot(kind='bar')
#按照某一行画图 [基于index] df.iloc[5].plot(kind='bar')
-
直方图和密度图
s = Series(np.random.randn(1000))
-
直方图:
hist()
plt.hist(s,rwidth=0.8, color='r', bins=20)
-
密度图:
plot(kind='kde')
s.plot(kind='kde')
-