本文是对《利用python进行数据分析》书中关于绘图可视化的一个回顾性总结笔记。
目录
matplotlib
pandas自带的绘图(重点内置方法plot)
seaborn
是什么
matplotlib实际上是一种比较基本低级的工具。matplotlib是一个用于创建出版质量图表的桌面绘图包(主要是2D方面)。要绘制一张图表,你组装一些基本组件就行:数据展示(即图表类型:线型图、柱状图、盒形图、散布图、等值线图等)、图例、标题、刻度标签以及其他注解型信息。更多的其实只要知道有什么图和函数,实际在做的时候完全可以去看官网的api教程来配参数。
官网案例教程:官网
引入约定
import matplotlib.pyplot as plt
Figure and Subplots
matplotlib的图像都位于Figure对象中。
不能通过空Figure绘图。必须用add_subplot创建一个或多个subplot才行(子图):
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
#在一个”界面“中增加最多2*2=4个小子图,后面的1,2,3表示子图1,2,3
ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)#hist表示直方图,而ax.plot表示线型相关的图
plt.subplots主要参数
plt.subplots_adjust(了解即可)
调整子图的间距。wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。
颜色标记和线型
在plt.plot或者plt.hist或者由plt.figure.addd_subplot得到的子图中等,可以指定图形的颜色。此以plt.plot中为例
参数: color,linestyle,marker
例子
plt.plot(randn(30).cumsum(),'ko--') # 后面的'ko--'是颜色和标记类型、以及线型的缩写。 实际为color='k',marker='o',linestyle='dashed'即--,即等同如下
plt.plot(randn(30).cumsum(),color='k',linestyle='dashed',marker='o') # 后面的颜色、线型、和标记类型可以缩写为'ko--'
结果
刻度标签和图例
对于plt.figure.subplot得到的对象ax里,主要参数:ax.set_xticks,ax.set_xticklabels,ax.set_title,ax.set_label,ax.legend
例子
# 对于以fig.add_subplot来画图的方式,图表的装饰项,含有诸如xlim ,xtricks和 xtricklabels之类的方法。它们分别控制图标的范围、刻度位置和刻度标签等。
fig =plt.figure();ax=fig.add_subplot(1,1,1)
ticks=ax.set_xticks([0,250,500,750,1000])#要改变x轴刻度,最简单的办法是使用set_xticks和set_xticklabels。前者告诉matplotlib要将刻度放在数据范围中的哪些位置,默认情况下,这些位置也就是刻度标签。
labels=ax.set_xticklabels(['one','two','three','four','five'],rotation=30,fontsize='small') #我们可以通过set_xticklabels将任何其他的值用作标签:
ax.set_title('myfirst matplotlib plot') # 设置标题
ax.set_xlabel('Stages') # x轴的总标签 。
# Y轴的修改方式与此类似,只需将上述代码中的x替换为y即可
ax.plot(randn(1000).cumsum(),label='one',color='green') # 里面的label 是图例1
ax.plot(randn(1000).cumsum(),label='two',color='black') # 在图中添加第二条线
ax.legend(loc='best') # 图例放的位置,best参数是让其自己选择最佳位置
plt.show()
结果
对于为在图中注明对应的点添加注释,可以通过ax.annotate的方式去添加。由于需要在指定的点,其实添加比较复杂,需要传kv对去标示。
线型柱状图
plot.hist后者ax.hist
散布图
含义
散布图是观察两个一维数据序列之间的关系的有效手段。matplotlib的scatter方法是绘制散布图的主要方法。
例子
print(trans_data[-5:])
# plt.scatter绘制散布图
plt.scatter(trans_data['m1'],trans_data['unemp'])
plt.title('Changes in log %s vs. log %s '%('m1','unemp'))
输出
pandas自身就有内置的方法,用于简化从DataFrame和Series绘制图形,都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线型图.
注意在jupyter中需要记得引入import matplotlib.pyplot as plt,并在最后加入 plt.show()图像 才会显示,且可以通过plt控制图形的大小、颜色等
series的plots方法完整参数
其中kind 标示图形类型,默认是line线性图。bar是柱状图,barh是水平柱状图,kde是密度图。注(# 与直方图相关的另一类图标类型是密度图 ,它是通过计算 “可能会产生观测数据的连续概率分布的估计” 而产生的。一般的过程是将该分布近似为一组核(即诸如正态高斯分布之类的较为简单的分布)。因此密度图也被称为KDE(Kernel Density Estimate 核密度估计图))
import matplotlib.pyplot as plt
plt.rc('figure',figsize=(6,5))
#Series和DataFrame都有一个用于生成各类图表的plot方法。
s=pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot()
#该Series对象的索引会被传给matplotlib,并用以绘制X轴。可以通过use_index=False禁用该功能。X轴的刻度和界限可以通过xticks和xlim选项进行调节,Y轴就用yticks和ylim。
输出
df = DataFrame(np.random.rand(6, 4),
index=['one', 'two', 'three', 'four', 'five', 'six'],
columns=pd.Index(['A', 'B', 'C', 'D'], name='Genus'))
print(df)
df.plot(kind='bar') # 注意,对于DataFrame,柱状图会将每一行的值分为一组。# 笔记:柱状图有一个非常不错的用法:利用value_counts图形化显示Series中各值的出现频率,比如s.value_counts().plot.bar()。
# DataFrame各列的名称'Genus'会被用作图例的标题
plt.show()
输出
df.plot.barh(stacked=True, alpha=0.5)
输出
seaborn
可以画上面的很多图,也支持箱型图(又称盒图)sns.factorplot等。基本图形其实只要能画出来表达意思即可,并不需要局限于用的什么包
官网案例教程:https://seaborn.pydata.org/tutorial.html