第二章:数据可视化
1、matplot初见
1.1 最基本的可视化图案有哪些?分别适用于那些场景?
最基本的可视化图有折线图,柱状图,饼图,散点图,直方图等,
折线图适用于观察某个值的走势,
柱状图适用于观察不同条件的对比,
饼图适用于分析组成成分或者比例;
散点图用于描述数据的分布情况。
1.2 Figure&Subplot
matplotlib的图像都位于Figure对象中,可以用plt.figure创建一个新的Figure
fig = plt.figure()
不能通过空Figure绘图,应该使用add_subplot创建一个或者多个subplot才行:
ax = fig.add_subplot(2, 2, 1)
plt.plot(np.random.randn(50).cumsum(), 'k--')
1.3 调整subplot周围的间距
默认情况下,matplotlib会在subplot外围留下一定的边距,并在subplot之间留下一定的间距。matplotlib可以通过subplots_adjust()方法来完成间距的修改。
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
subplots_adjust()各参数中,wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。
1.4 颜色、标记和线型
matplotlib的plot函数接受一组x和y坐标,还可以接受一个表示颜色和线型的字符串缩写。
ax.plot(x, y, linestype='--', colot='g', marker='o')
要改变x轴刻度,最简单的方法是使用set_xticks和set_xticklabels,前者告诉matplotlib要将刻度放在数据范围内的那些位置,默认情况下,这些位置就是刻度标签,但可以通过set_xticklabels将任何其他值用作标签。
ticks = ax.set_xticks([0, 250, 500, 700, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small')
#rotation参数将x刻度标签倾斜30°
ax.set_title('matplotlib plot')
ax.set_xlabel('matplotlib plot')
1.5 添加图例
图例(legend)是另一种用于标识图表元素的重要工具。添加图例的方式简单的是在添加subplot的时候传入label参数:
from numpy.random import randn
fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
传入label参数之后,可以调用ax.legend()或者plt.legend()来自动创建图例:
ax.legend(loc='best')
其中loc参数标识图例所在的位置,主要取值有upper right、upper left、lower right、lower left、best、center等,其中best参数会选择一个不碍事的位置。
1.6 注释及在subplot上绘图
需要绘制一些子集的注解或者文字时,可以使用text、arrow、annotate函数进行添加
2、使用pandas和seaborn绘图
在pandas中,我们有多列数据还有行和标签,pandas自身就有内置的方法,用于简化从DataFrame和Series绘制图像,而Seaborn简化了许多常见的可视类型的创建。
2.1 线型图
Series和DataFrame都有一个用于生成各类图标的plot方法,默认情况下,它们生成的是线型图。plot参数完整列表如下:
pandas大部分绘图方法都有一个可选的ax参数,这是一个matplotlib的subplot对象。
2.2 柱状图
plot.bar()和plot.barh()分别绘制水平和垂直的柱状图。这时,Series和DataFrame的索引将会被用作X(bar)或者Y(barh)刻度
2.3 直方图和密度图
直方图(histogram)是一种可以对值频率进行离散化显式的柱状图。数据点被拆散到离散的、间隔均匀的面元中,绘制的是各面元中数据点的数量。
tips['tip_pct'].plot.hist(bins=50)
密度图,它是通过计算“可能会产生观测数据的连续概率分布的估计”而产生的。一般的过程是将该分布近似为一组核(即诸如正态分布之类的较为简单的分布)。因此,密度图也被称作KDE(Kernel Density Estimate,核密度估计)图
tips['tip_pct'].plot.density()
使用seaborn的distplot方法绘制直方图和密度图更加简单,还可以同时画出直方图和连续密度估计图》
import seaborn as sns
sns.displot(data, bins=100, color='k')
2.4 散布图或点图
点图或散布图是观察两个一维数据序列之间的关系的有效手段,可以利用seaborn的regplot方法来制作一个散布图,并加上一条线性回归的线。
sns.regplot('m1', 'unemp', data=trans_data)
探索式数据分析工作中,同时观察一组变量的散布图是很有意义的,这也被称为散布图矩阵。seaborn提供了一个便捷的pairplot函数,它支持再对角线上放置每个变量的直方图或者密度估计:
sns.pairplot(trans_data, diag_kind='kde', plot_kws={'alpha':0.2})
plot_kws参数可以让我们传递配置选项到非对角线元素上的图形使用。