第八章 绘图和可视化

[链接]

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)
Paste_Image.png
* 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")
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容