Matplotlib-绘制散点图

15.Matplotlib-绘制散点图

扫码关注【牵引小哥讲Python】,关注回复【资源】领取学习资源!

原创作者:牵引小哥

微信公众号:牵引小哥讲Python

注:转载或复制请注明出处——牵引小哥

本期小哥主要讲解散点图的绘制方法。在Matplotlib中使用ax.scatter()函数绘制散点图。官方参考链接:

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter

1. ax.scatter()的基础用法

ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, alpha=None, edgecolors=None, **kwargs)                  

关键参数说明:

  • x:x轴数据序列
  • y:y轴数据序列
  • c:数据点的颜色,可以是单一颜色,也可是颜色序列
  • marker:数据点形状(默认圆形)
  • camp:可对数据点指定色谱映射
  • alpha:数据点透明度
  • edgecolors:数据点轮廓颜色
  • **kwargs:其他参数

应用举例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.size'] = 16
mpl.rcParams['figure.figsize'] = (6,5) 
plt.rcParams['font.sans-serif'] = ['SimHei']  
plt.rcParams['axes.unicode_minus'] = False  

#%% 基础用法
x = np.arange(0, 6, 0.2)
y1 = x**2
y2 = (x - 5.8)**2
# 根据数据特点定义数据点颜色和大小的映射序列
colors = np.linspace(y1.min(), y1.max(), len(x)) #颜色序列与y轴数值对应
size =15 * np.linspace(1, 10, len(x))

fig, ax = plt.subplots()
ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
# cmap='hsv'意为使用Matplotlib内置的‘hsv’色谱,更多讲解可参考小哥之前关于颜色的文章
plt.show()
plt.tight_layout()

可以看到,数据点的颜色和大小均随数值变化。

小哥Tips:数据点的size随数据顺序,由小变大。

接下来,小哥简单讲解下关于颜色和大小的映射顺序问题。比如我们绘制y1,y2两个关于x = 5.8对称的函数散点图:

# y1 = x**2
# y2 = (x - 5.8)**2
ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.scatter(x, y2, s=size, c=colors, alpha=0.75, cmap='viridis')

从结果可以看出,数据点的大小并不对称。为了使其对称,就需要更改数据序列的顺序,使其逆序。在这里,小哥使用数组切片技巧[: : -1]获得元组的逆序结果。

ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.scatter(x[::-1], y2[::-1], s=size, c=colors, alpha=0.75, cmap='hsv')

还可以为散点图添加图例:

scatter = ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.legend(*scatter.legend_elements(), bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0)

不同的颜色对应不同的与y轴的数值大小对应。

2. 离散数据的散点图

对于离散的数据可以使用散点图进行可视化。

np.random.seed(0)
fig, ax = plt.subplots()
citys = ['成都', '武汉', '重庆']
colors = ['blue', 'red', 'yellow']
for i in range(len(citys)):
    color = colors[i]
    city = citys[i]
    n = 20
    x, y = np.random.rand(2, n) # 生成随机数数组
    scale = 200.0 * np.random.rand(n)
    ax.scatter(x, y, c=color, s=scale, label=city,
                alpha=0.5, edgecolors='none')

ax.legend(loc='lower center', ncol=3, bbox_to_anchor=(0.5, 1))
ax.grid(color='k', linestyle='--', linewidth=0.2)

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

推荐阅读更多精彩内容