matplotlib--基本setting
一、创建自定义图像 figure
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True) num:图像编号或名称,数字为编号 ,字符串为名称 figsize:指定figure的宽和高,单位为英寸; dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张 facecolor:背景颜色 edgecolor:边框颜色 frameon:是否显示边框
import matplotlib.pyplot as plt #创建自定义图像 fig=plt.figure(figsize=(4,3),facecolor='blue')
plt.show()
二、画图
Series.plot()画柱状图、直方图、密度图、线形图
Series.plot方法的参数
DataFrame还有一些用于对列进行灵活处理的选项,例如,要将所有列都绘制到一个subplot中还是创建各自的subplot。参数如下表:
1.柱状图(kind='bar')
柱状图(bar chart)
优点:人眼对高度较敏感,直观各组数据差异性,强调个体与个体之间的比较
缺点:不适合大量的数据集数据(项数较多)
适用场景:一个维度数据比较、数据单纯性展示、排序数据展示
适用数据: 数据集不大, 二维数据
from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 雅黑字体 mpl.rcParams['axes.unicode_minus'] = False import matplotlib.pyplot as plt fig = plt.figure() from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 雅黑字体 mpl.rcParams['axes.unicode_minus'] = False fig.set(alpha=0.5) # 设定图表颜色alpha参数 data_train.Survived.value_counts().plot(kind='bar')#柱状图 plots a bar graph of those who surived vs those who did not. plt.title(u"获救情况 (1为获救)") # puts a title on our graph plt.ylabel(u"人数")
sns.countplot(x='SibSp',hue='Survived',data=df)
多分类累积柱状图
2.直方图()
直方图(histogram)是一种可以对值频率进行离散化显示的柱状图。数据点被拆分到离散的、间隔均匀的面元中,绘制的是各面元中数据点的数量。Series.hist()。
在之后调用plot时加上参数kind='kde'即可生成一张密度图。
3.密度图(kind='kde')
data_train.Age[data_train.Pclass == 1].plot(kind = 'kde') data_train.Age[data_train.Pclass == 2].plot(kind = 'kde') data_train.Age[data_train.Pclass == 3].plot(kind = 'kde') plt.xlabel('年龄') plt.ylabel('密度') plt.title('各等级的乘客年龄分布') plt.legend(('头等舱','二等舱','三等舱'),loc = 'best')
4.线性图
折线图(line chart)
折线图分为 直线折线图和曲线折线图,直线折线图一般适用于离散变量,曲线折线图一般适用于连续变量。
优点: 直观反映数据变化趋势
缺点:数据集太小时显示不直观
适用场景:需要反映变化趋势,关联性。
适用数据:时间序列类数据、关联类数据(如电流跟随电压变化而变化)
pandas的大部分绘图方法都有一个可选的ax参数,它可以是一个matplotlib的subplot对象。这是你能够在网络布局中更为灵活地处理subplot的位置。DataFrame的plot方法会在一个subplot中为各列绘制一条线,并自动创建图例
df = pd.DataFrame(np.random.randn(10, 4).cumsum(0), columns=list('ABCD'), index=np.arange(0, 100, 10)) df.plot() plt.show()
画验证集的学习曲线
5.小提琴图
import seaborn as sns #作小提琴图 sns.violinplot(x='Survived',y='Age',data=df)
6.散点图
散点图(scatter plot)
优点: 直观反映数据集中情况,对离散数据线性回归等曲线预测性的拟合辅助作用
缺点:适用场景比较少
适用场景:两个维度比较(地图某地区某项数据集中分布),对离散数据进行预测时
适用数据:离散值数据
散点图(scatter plot)是观察两个一维数据序列之间的关系的有效手段。matplotlib的scatter方法是绘制散布图的主要方法。利用plt.scatter()即可轻松绘制一张简单的散布图。
而且,pandas提供了下一个能从DataFrame创建散步图矩阵的scatter_matrix函数。它还支持在对角线上放置个变量的直方图或密度图。
7.饼图
饼图(Pie)
优点: 直观显示各项占总体的占比,分布情况,强调整个与个体间的比较。
缺点:数据不精细,不适合分类较多的情况
适用场景:一个维度各项指标(一般不超过5个项目)占总体的占比情况,分布情况。(例如:不同状态下的车辆分布,公司内各个团队营收收入)
适用数据:具有整体意义的各项相同数据
三、子图
1.subplot
(1)均匀分图
(2)不均匀分图
如果希望展示的小图的大小不相同, 应该怎么做呢?
以上面的4个小图为例, 如果把第1个小图放到第一行, 而剩下的3个小图都放到第二行.
使用plt.subplot(2,1,1)将整个图像窗口分为2行1列, 当前位置为1.
使用plt.plot([0,1],[0,1])在第1个位置创建一个小图.
plt.subplot(2,1,1)
plt.plot([0,1],[0,1])
使用plt.subplot(2,3,4)将整个图像窗口分为2行3列, 当前位置为4.
使用plt.plot([0,1],[0,2])在第4个位置创建一个小图.
plt.subplot(2,3,4)
plt.plot([0,1],[0,2])
这里需要解释一下为什么第4个位置放第2个小图. 上一步中使用plt.subplot(2,1,1)将整个图像窗口分为2行1列, 第1个小图占用了第1个位置, 也就是整个第1行. 这一步中使用plt.subplot(2,3,4)将整个图像窗口分为2行3列, 于是整个图像窗口的第1行就变成了3列, 也就是成了3个位置, 于是第2行的第1个位置是整个图像窗口的第4个位置.
使用plt.subplot(235)将整个图像窗口分为2行3列,当前位置为5. 使用plt.plot([0,1],[0,3])在第5个位置创建一个小图. 同上, 再创建plt.subplot(236).
plt.subplot(235) plt.plot([0,1],[0,3]) plt.subplot(236) plt.plot([0,1],[0,4]) plt.show() # 展示
2.subplot2grid
使用plt.subplot2grid来创建第1个小图, (3,3)表示将整个图像窗口分成3行3列, (0,0)表示从第0行第0列开始作图,colspan=3表示列的跨度为3, rowspan=1表示行的跨度为1. colspan和rowspan缺省, 默认跨度为1.
使用plt.subplot2grid来创建第2个小图, (3,3)表示将整个图像窗口分成3行3列, (1,0)表示从第1行第0列开始作图,colspan=2表示列的跨度为2. 同上画出 ax3, (1,2)表示从第1行第2列开始作图,rowspan=2表示行的跨度为2. 再画一个 ax4 和 ax5, 使用默认 colspan, rowspan.
import matplotlib.pyplot as plt plt.figure() ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3) # stands for axes ax1.plot([1, 2], [1, 2]) ax1.set_title('ax1_title') ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2) ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2) ax4 = plt.subplot2grid((3, 3), (2, 0)) ax4.scatter([1, 2], [2, 2]) ax4.set_xlabel('ax4_x') ax4.set_ylabel('ax4_y') ax5 = plt.subplot2grid((3, 3), (2, 1))
3.gridspec
使用plt.subplot来作图, gs[0, :]表示这个图占第0行和所有列, gs[1, :2]表示这个图占第1行和第2列前的所有列, gs[1:, 2]表示这个图占第1行后的所有行和第2列, gs[-1, 0]表示这个图占倒数第1行和第0列, gs[-1, -2]表示这个图占倒数第1行和倒数第2列.
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec plt.figure() gs = gridspec.GridSpec(3, 3) ax6 = plt.subplot(gs[0, :]) ax6.plot([0,1],[1,2]) ax7 = plt.subplot(gs[1, :2]) ax8 = plt.subplot(gs[1:, 2]) ax8.plot([0,1],[0,6]) ax9 = plt.subplot(gs[-1, 0]) ax9.scatter([0,1],[0,3]) ax10 = plt.subplot(gs[-1, -2])
4.subpplots
f,((ax11, ax12), (ax13, ax14)) = plt.subplots(2, 2, sharex=True, sharey=True) ax11.scatter([1,2], [1,2]) ax14.plot([3,5],[1,2])