07

大家好,我是营长,昨天营长分享了数据科学”的知识点:,不清楚的小伙伴可戳这????每日一课|Python数据可视化-如何分区和绘图

本期营长接着为大家分享Python数据可视化相关内容

这期分享营长邀请的是齐伟(Python大学教材及畅销书作者)分享案列上手-Python数据可视化

作者寄语

努力面前,忘记背后,向着标杆直跑。

当遇到貌似无法克服的困难时,当怀疑自己是否能够学会时,当受到其他诱惑想放弃时,请来读一读这句话。

详细开篇词,可戳此链接:https://gitbook.cn/gitchat/column/5c6cd09e7fa9074fde9c8909/topic/5c6cd10f7fa9074fde9c890a

07

多样化的图像

在上一课,已经了解了基本的绘图方法,特别是熟悉了如何对坐标系做各种各样的设置,那是可视化的基础。本课要在上一课内容的基础上,进一步丰富坐标系内图像的设置。

注意,没有使用曲线这个词,显然包括但不限于曲线。

1.4.1 标注

如果在坐标系中绘制了多条曲线,会用图例表示出每条曲线的含义,这是一种区分方式;另外一种方式是直接对每条曲线进行标注,或许这样更直接明了。此外,有时候对于坐标系中某些特殊点也会进行标注。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as pltx = np.arange(0, 10, 0.005)
y = np.exp(-x/2) * np.sin(2*np.pi*x)fig, ax = plt.subplots()
ax.plot(x, y)ax.set_xlim(0, 10)
ax.set_ylim(-1, 1)ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position('zero')#以下标注
x1 = 1.25
y1 = np.exp(-x1/2) * np.sin(2*np.pi*x1)
ax.scatter([x1,], [y1,], 50, color='blue') #①
ax.plot([x1, x1], [0, y1], color='blue', linewidth=2.5, linestyle="--") #②
ax.plot([0, x1], [y1, y1], color='blue', linewidth=2.5, linestyle='--') #③ax.annotate(r'$e^{-\frac{x}{2}}sin(2\pi{x}), x=1.25$', xy=(x1, y1), xycoords='data', xytext=(+30, +0.6), textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #④

输出结果:

先看输出的结果,相比以往绘制的类似图,此处做了两处改变,一处是坐标系,现在把 x 轴设置到了 y=0 的位置,这种设置方法的解释请参考上一课的内容;另外一处是增加了标注,即图中看到的,除了曲线和坐标轴之外,都属于标注的部分。这些内容是通过代码中写有注释的那一行以下的代码实现的,一共4行,下面逐一进行解释。

① 的目的在于呈现图中的坐标点,即那个蓝色的圆点。scatter 是实现散点图的方法(函数),后面会对此进行详细讲解。请注意这里的参数 [x1,], [y1,]。如果用数学方式表示,应该画出的点是 (x1, y1),这是一个坐标点。scatter 方法的参数跟以前学习过的 plot 一样,都要输入表示横轴的数据集和表示纵轴的数据集,那么,就要把 x1 和 y1 分别放到两个序列中,于是就有了参数 [x1,], [y1,]。

② 和 ③ 的作用就从坐标点 (x1, y1) 分别向 x 轴、y 轴画出垂直的虚线。

④ 是标注文字说明,此处使用 ax.annotate 方法,也可以用 plt.annotate 函数。

r’e^{-\frac{x}{2}}sin(2\pi{x}), x=1.25

e−2

x

  • sin(2πx),x=1.25’:这是所显示的内容,在 Matplolib 中,支持 LaTex 编辑显示公式。

  • xy=(x1, y1):说明被标注点的坐标。

  • xycoords=‘data’:标注内容指向的点,默认值是 ‘data’,也可以选其他值

  • xytext=(+30, +0.6):上述文本内容的显示位置。

  • arrowprops=dict(arrowstyle="->", connectionstyle=“arc3,rad=.2”):箭头的设置。

在坐标系内能够绘制的图像,除了曲线之外,还有很多其他类型的图像,如散点图。

1.4.2 散点图

散点图很重要,是因为在科学研究中,特别是规律探索的过程中,散点图是一种常用的图像。通常发现科学规律的过程是这样进行的:

  • 设计实验,通过实验测量得到数据;

  • 将数据在坐标系内做散点图;

  • 观察散点图的特点,推断可能的函数关系,即规律;

  • 再用实验验证规律是否正确,也包括理论上的检验,总之,只要没有发现不符合上述规律的实验数据,就姑且认为该规律是成立的。

当然,上面的过程是以得到一个函数为例说明,有时候画出散点图,或许也不是为了得到某一个函数。

那么,散点图怎么画?

前面已经剧透过了,scatter 就是用来画散点图的方法。

n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
plt.scatter(X,Y)

输出结果:

X、Y 是符合高斯分布的数据(np.random.normal() 随机生成符合高斯分布的数字集),然后用 plt.scatter() 做散点图,从图中可以直观地看到数据的分布,这正是高斯分布的特点。

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs)

scatter 的参数中除了 x,y 必不可少的之外,还有其他很多参数,在后面的绘图中,会用到一些。

import pandas as pd
cities = pd.read_csv("/Users/qiwsir/Documents/Codes/DataSet/jiangsu/city_population.csv")
cities#outname area population longd latd
0  南京市 6582.31  8004680  118.78  32.04
1  无锡市 4787.61  6372624  120.29  31.59
2  徐州市 11764.88  8580500  117.20  34.26
3  常州市 4384.57  4591972  119.95  31.79
4  苏州市 8488.42  10465994  120.62  31.32
5  南通市 8001.00  7282835  120.86  32.01
6  连云港市 7615.29  4393914  119.16  34.59
7  淮安市 9949.97  4799889  119.15  33.50
8  盐城市 16972.42  7260240  120.13  33.38
9  扬州市 6591.21  4459760  119.42  32.39
10  镇江市 3840.32  3113384  119.44  32.20
11  泰州市 5787.26  4618558  119.90  32.49
12  宿迁市 8555.00  4715553  118.30  33.96

从数据集中读入上述数据,可以点击这里下载。

变量 cities 引用的数据集是江苏省各个城市的名称、人口、面积和经纬度数据。下面就要通过可视化的方式,把这些特征体现出来。

lat = cities['latd']
lon = cities['longd']
population = cities['population'],
area = cities['area']plt.scatter(lon, lat, label=None, c=np.log10(population)[0], cmap="viridis", s=area/10, linewidths=0, alpha=0.5)
plt.axis(aspect='equal')
plt.xlabel("longitude")
plt.ylabel('latitude')
plt.colorbar(label='log$_{10}$(population)') for area in [10, 30, 50]:plt.scatter([], [], c='k', alpha=0.3, s=area, label=str(area) + ' km$^2$')plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='City Area')
plt.title('江苏省各城市面积和人口')

输出结果:

此处是按照经纬度来绘制散点图的,因此,各个城市在上图中的位置,应该跟实际地图中的位置一样的。为了对比,请看江苏省的地图。

对比上下两张图,一定会为自己绘制的散点图所折服的。

在心理美滋滋之后,对关键语句进行介绍。

  • plt.scatter(lon, lat, label=None, c=np.log10(population)[0], cmap=“viridis”, s=area/10, linewidths=0, alpha=0.5) :这是绘制散点图的基本函数。scatter 参数众多,这里涉及一些,为了理解此行代码,适当解释几个参数。

    • c:设置颜色。在此处使用的值是 np.log10(population)[0],因为各个城市 population 数值较大,用对数对原值进行转换。注意,np.log10(population) 的结果是一个形状为 (13, 1) 的数组,因此要以 np.log10(population)[0] 的方式获得每个城市所对应的色彩,严格来讲只是建立了与色彩的映射关系,具体的色彩还要由 cmap 决定。

    • cmap:当用浮点数设置了参数 c 的值之后,就可以根据此处设置的色彩谱得到相应的色彩。

    • s:设置每个点的大小,还是考虑到 area 数值有点大,因此除以 10。

    • linewidths:设置每个点外周的线的粗细。

plt.colorbar(label=‘log_{10}

10

  • (population)’):这也是一个新面孔,它的作用是生成了图中右侧的数据光谱。

对于散点图而言,其中的“点”,除了可以是圆点之外,还可以是别的形状的。比如,下面的代码来自于官方网站的示例。

np.random.seed(19680801)x = np.arange(0.0, 50.0, 2.0)
y = x ** 1.3 + np.random.rand(*x.shape) * 30.0
s = np.random.rand(*x.shape) * 800 + 500plt.scatter(x, y, s, c="g", alpha=0.5, marker=r'$\clubsuit$',label="Luck")
plt.xlabel("Leprechauns")
plt.ylabel("Gold")
plt.legend(loc='upper left')

输出结果:

原来的“点”变成了上图中的“树”,其原因就是 scatter 函数中的 maker 参数,通过设置其值,能够实现不同形状的“散点”。其他的值可以在官方网站的页面中得到,可点击这里获取。

对于散点图而言,除了在正交的直角坐标系中绘制之外,可能有时候也会在极坐标系中绘制,其他图像也有此可能,但是因为不常用,因此在前面未提及。而散点图,对于极坐标系则是一种比较常见的需要。

np.random.seed(19680801)# 点的面积和色彩
N = 150
r = 2 * np.random.rand(N)
theta = 2 * np.pi * np.random.rand(N)
area = 200 * r**2
colors = thetafig = plt.figure()
ax = fig.add_subplot(111, projection='polar')
ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)

输出结果:

系是通过 fig.add_subplot(111, projection=‘polar’) 里的参数 projection=‘polar’ 建立的,其他方面则与之前的正交坐标系一致了。

虽然这里能够画出色彩斑斓的散点图了,但是,要注意,并不是什么时候都要这样画图的。为每个点或者某些点标明色彩,其实是为了分类,如果没有这种需要,并且是要处理大量数据,推荐使用另外一个——plt.plot。

前面用这个函数绘制的都是曲线,如何用它来绘制散点图?

df = pd.read_csv("/Users/qiwsir/Documents/Codes/DataSet/xsin/xsin.csv")
plt.plot(df.x, df.y, 'Dr')

输出结果:

本例中的数据集来自于:https://github.com/qiwsir/DataSet/tree/master/xsin/xsin.csv。

这样绘制出来的散点图,因为没有对各个点进行单独渲染,所以在处理大数据的时候,速度就快多了。

总结

本课是在前一课的基础上,进一步丰富了在坐标系中绘制的图像。

  • 对曲线做标注:ax.annotate

  • 绘制散点图:ax.scatter

  • 创建极坐标系:fig.add_subplot(111, projection=‘polar’)

  • 用 plt.plot 针对大量数据做散点图

特别提醒,因为每个函数都有很多参数,在使用的时候,一定要勤查阅官方文档,从中了解参数的控制对象和效果。

本期7日专栏到今天就结束了,各位大佬学的怎么样?记得抽空学习呀!

咱们下期再见!

以上内容均来自CSDN GitChat《Python数据可视化》,作者齐伟,Pthon大学教材及畅销书作者,识别二维码查看专栏更多详情。

仅限5月6日-5月12日

仅需49元

识别二维码查看详情

????????

点击阅读原文

每日一课 | Python数据可视化—多样化的图像相关推荐

  1. 每日一课 | Python数据可视化—如何分区和绘图

    06 大家好,我是营长,昨天营长分享了数据科学"的知识点:,不清楚的小伙伴可戳这????每日一课|Python数据可视化-重新认识坐标系 本期营长接着为大家分享Python数据可视化相关内容 ...

  2. 每日一课 | Python数据可视化—如何做好启动准备(小白必读)

    03 大家好,我是营长,昨天营长分享了数据科学"的基本概念,不清楚的小伙伴可戳这????每日一课|案列上手Python数据可视化 本期营长接着为大家分享Python数据可视化相关内容 这期分 ...

  3. 每日一课 | Python数据可视化—Matplotlib初体验

    04. Matplotlib初体验 大家好,我是小C,上期给大家分享--Python数据可视化-如何做好启动准备(小白必读) 本期分享内容:Python数据可视化-Matplotlib初体验 本期小C ...

  4. 每日一课 | Python数据可视化—认识坐标系

    05. 重新认识坐标系 大家好,我是小C,上期给大家分享--Python数据可视化-Matplotlib初体验 本期分享内容:Python数据可视化-Matplotlib初体验 本期小C邀请的是齐伟( ...

  5. 免费直播课|Python数据可视化与科学计算可视化案例分享

    推荐图书: <Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社,第9次印刷 图书详情(京东): 董付国老师所有图书均提供配套教学资源. ======= ...

  6. Python数据可视化(微课版)-简介

    前 言 当前,我们正处于大数据爆发的时代,涌现出大量不同类型的时空数据和非时空数据,信息激流使个人.企业和社会对大数据的依赖不断深化,与此同时,数据可视化研究已成为一个新的时代命题,与立体建模等方法相 ...

  7. 字节数组转换为图片_每日一课 | Python 3 TypeError:无法将“字节”对象隐式转换为str...

    将Python 2套接字示例转换为Python 3 whois.py import sysimport socket s = socket.socket(socket.AF_INET, socket. ...

  8. 《Python数据可视化之matplotlib实践》配套代码

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx <Python数据可视化之matplotlib实践> 借助matplotlib讲解 ...

  9. python利器-Python 数据可视化利器

    原标题:Python 数据可视化利器 (给Python开发者加星标,提升Python技能) 作者:zone7(本文来自作者投稿,简介见末尾) 概述 前言 推荐 plotly bokeh pyechar ...

最新文章

  1. win7如何打开防火墙某个端口的tcp连接
  2. ACL 2021 | ConSERT:基于对比学习的句子语义表示迁移框架
  3. Internet Explorer 9.0 正式版试用一点小总结
  4. vue 传参 微信_vue-router 你可能忽略的知识点
  5. 渲染上下文Rendering Context
  6. 【Matplotlib】详解图像各个部分
  7. python中不可以用来表示字符串_在Python中,不可以用来表示字符串的符号是____________。...
  8. Linux交叉编译+粤嵌LCD实现三色图
  9. jQuery动画之显示隐藏动画
  10. 微软影子系统EWF软件用法及参数描述
  11. Paxos算法(一)—Basic Paxos
  12. 科技小科普】物联网的八大核心技术
  13. html动画 箭头线条,html – 悬停时动画的箭头线
  14. C语言解决狐狸找兔子的问题(数组)
  15. 接触webGl(three.js)之全景(VR)看房的实现旅程总结
  16. python画图颜色填充_【Python】Matplotlib画图(十一)——箱线图
  17. android手机照片传苹果电脑版,为知笔记Android/iPhone客户端图片传到电脑客户端的方法介绍...
  18. 数据同步工具—DataX部署使用
  19. 计算机视觉 马尔_计算机视觉概述
  20. .NET CoreRT AOT原生程序编译使用的一些小建议

热门文章

  1. 电商推荐系统(上):推荐系统架构、数据模型、离线统计与机器学习推荐、历史热门商品、最近热门商品、商品平均得分统计推荐、基于隐语义模型的协同过滤推荐、用户商品推荐列表、商品相似度矩阵、模型评估和参数选取
  2. Sass平台中使用免费地图实现大屏解决方案
  3. WEB前端基础(HTML+CSS+JavaScript)(上)最好看最详细的笔记~
  4. pitaya游戏服务器框架win10架设记录
  5. openWRT的SDK编译环境的安装和设置
  6. Arduino-CCS-811检测空气中CO2和VOC含量(超详细)
  7. html代码 col,html元素col标签的使用方法及作用
  8. 描述性统计、参数估计和假设检验
  9. android 腾讯直播sdk,Android-接入腾讯直播遇到的问题
  10. 日立电梯中标南京金陵中环项目