第八章 绘图和可视化
2017-09-05 本文已影响0人
进步小小青年
[链接]
01. matplotlib API入门
02. Pandas中的绘图函数
03. 绘制地图:图形化显示海地地震危机数据
04. Python图形化工具生态系统
——
1. matplotlib API入门
* matplotlib API(如plot和close)都位于matplotlib.pyplot模块中,其通常的引入约定是:
import matplotlib.pylot as plt
Figure 和 Subplot
- matplotlib 的图像都位于Figure对象中,可以利用plt.figure创建一个新的Figure:
fig=plt.figure()
pandas中的绘图函数
- 要组装一张图标,需要用到的基础组件:
& 数据展示(即图表类型:线型图、柱状图、盒形图、散布图、等值线图等)
& 图例、标题、刻度标签以及其他注解型信息
——————————————————————————
lesson7 matplotlib
——————————————————————————
matplotlib绘图基础
在绘图开始之前,首先需要导入一些常用工具
导入matlpotlib绘图工具
import matplotlib.pyplot as plt
导入numpy和pandas包
import numpy as np
import pandas as pd
设置在notebook中直接展示图形输出
%matplotlib inline
设置图片的清晰度
%config inlinebackend.figure_format='retina'
1.使用matplotlib中的plot绘图函数 plt.plot(x,y)
2.设置填充颜色和透明度 plt.fill_between(x,y,color='k',alpha=0.2)
3.添加标题、x轴和y轴的名称
- 标题:plt.title('sine function',size=18)
- X轴:plt.xlabel('x',size=16)
- Y轴:plt.ylabel('y',size=16)
4.修改图形细节
- "b"代表blue,指定蓝色,"- / --"指定线条的种类
- linewidth指定线的粗细
plt.plot(x, y, "b-", linewidth=2.0)
5.在图形上增加其他常用选项
- marker加上书记点标记 ,选项包括 [ '+' | ',' | '.' | '1' | '2' | '3' | '4' ]
- plt.axis([0, 5, -1.1, 1.1])设定x轴和y轴区间,等价于plt.xlim(0,5) 加上 plt.ylim(-1.1, 1.1)
- 加上网格 plt.grid(True)
- 加上文字描述 plt.text(3.1, 0.3, 'sin functoin')
* 实际演练:利用上面的知识,画一张图,作图如下:
y=x, y=x^2, y=x^3
6.函数的分组与聚合
- groupby分组,并使用agg进行聚合运算,sum求交易总额,count计算交易次数
- reset_index 重置索引,在这里取消了name作为索引
- sort_values 进行排序,参数by设置按哪一列进行排序,ascending=False 表示按降序排列
df.groupby('name')['ext price'].agg(['sum','count'])——函数的分组与聚合
.reset_index()——重置索引
.sort_values(by='sum',ascending=False)——按by后面的内容(sum)重新排序
其中 ascending=False 表示按降序排列
7. 使用rename对变量重新命名
top10.rename(columns={'name': 'Name', 'sum': 'Sales', 'count': 'Purchases'}, inplace=True)
8. 绘图函数
- 使用ggplot风格的作图
plt.style.use('ggplot')
* 8.1条形图
barh绘制水平方向的条形图, bar绘制垂直的直方图
- 修改纵坐标和横坐标的刻度
plt.yticks(np.arange(10), top10.Name)—将纵坐标修改为排名前10的公司名字
plt.xticks——修改横坐标刻度 - plt.yticks(np.arange(10), top10.Name)
- plt.xticks([0, 20000, 40000, 60000, 80000, 100000, 120000, 140000],
['$0k', '$20k', '$40k', '$60k', '$80k', '$100k', '$120k', '$140k'])
图一
图二
-
可以使用plt.style.available查看可选作图风格,尝试不同的风格作图
plt.style.available
-
['_classic_test',
-
'bmh',
-
'classic',
-
'dark_background',
-
'fivethirtyeight',
-
'ggplot',
-
'grayscale',
-
'seaborn-bright',
-
'seaborn-colorblind',
-
'seaborn-dark-palette',
-
'seaborn-dark',
-
'seaborn-darkgrid',
-
'seaborn-deep',
-
'seaborn-muted',
-
'seaborn-notebook',
-
'seaborn-paper',
-
'seaborn-pastel',
-
'seaborn-poster',
-
'seaborn-talk',
-
'seaborn-ticks',
-
'seaborn-white',
-
'seaborn-whitegrid',
-
'seaborn']
* 绘制多图
在同一幅图中,分别绘制top10公司的销售总额和交易次数的条形图
- 设置画布大小——fig = plt.figure(figsize=(12,5))
-
加上图像标题, fontsize=14 字体大小, fontweight='bold' 加粗
fig.suptitle('Sales Analysis', fontsize=14, fontweight='bold') -
添加第一个子图——ax1 = fig.add_subplot(121)
plt.barh(np.arange(10), top10.Sales, height=0.5, tick_label=top10.Name)
plt.title('Revenue') -
加入平均销售额,用一条垂直的虚线表示
revenue_average = top10.Sales.mean()
plt.axvline(x=revenue_average, color='b', linestyle='--', linewidth=1) -
添加第二个子图——ax2 = fig.add_subplot(122)
plt.barh(np.arange(10), top10.Purchases, height=0.5)
plt.title('Units') -
不显示y轴刻度
plt.yticks(visible=False) -
加入平均交易个数,用一条垂直的虚线表示
purchases_average = top10.Purchases.mean()
plt.axvline(x=purchases_average, color='b', linestyle='--', linewidth=1)
* 8.2饼图
- pie绘制饼图
- labels设置每个区域的标签名 labels=top10.Name
- autopct 显示所占比例 autopct='%1.1f%%')—1.1代表100%后保留一位小数
-
plt.axis('equal') 调整坐标轴相等
饼图图例如下
图三
* 8.3 散点图
- scatter 绘制散点图
- x,y设置x轴和y轴对应的数据
-
s设置点的大小
plt.scatter(x=top10.Purchases, y=top10.Sales, s=50)
散点图图例如下
图四
* 8.4直方图
- hist 绘制直方图
- bins设置区间个数
-
plt.xlim(-200, 5000)设置x轴区间范围
plt.hist(df['ext price'], bins=20, rwidth=0.9) -
设置宽度 rwidth=0.5(为什么width前面加 r ?)
直方图图例如下
图五
Python数据可视化模块—Seaborn
- matplotlib是python的主要绘图工具,但其自身的语法比较复杂
- Seaborn是基于matplotlib产生的一个模块,专攻于统计可视化
- 可以和pandas进行无缝链接,初学者使用Seaborn更容易上手
- Seaborn和matplotlib的关系类似于pandas和numpy的关系。
1.导入数据包
-
导入seaborn包, 简写成sns
import seaborn as sns
使用seaborn做图, 用品种划分数据
- FacetGrid对象是用来连接pandas DataFrame到一个有着特别结构的matplotlib图像
- 具体来说,FacetGrid是用来画一组固定的关系给定某个变量的某个值
- FacetGrid中的hue参数指明划分数据的变量,这里是species(品种)
1.1 散点图
sns.FacetGrid(iris, hue="species", size=8).map(plt.scatter, "petal_length", "petal_width").add_legend()
图六
1.2 箱图
sns.boxplot(data=iris, x="species", y="sepal_width")
图七
1.3 多变量图
用于快速观察各个变量的分布,及其之间的关系
-
一行命令画出四个变量的配对关系
sns.pairplot(iris, hue="species")