暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[神奇的Python可视化]在Matplotlib上面绘制图片标记

虾神说D 2020-06-05
970
人狠话不多,先看效果:
随机散点图+表情包
正弦曲线 + 表情包
看起来,是不是很有Python + 美图秀秀联合制作的风格(PS我不会用,我就会美图秀秀,这里美图公司是不是要来联系我谈一下带盐和广告费的问题?)
所谓的天下苦matplotlib散点图符号久矣……
众所周知的是matplotlib的散点图符号是固定的,如下所示:
markertype
“.”
point
“,”
pixel
像素
“o”
circle
“v”
triangle_down
下三角
“^”
triangle_up
上三角
“<”
triangle_left
左三角
“>”
triangle_right
右三角
“1”
tri_down
类似奔驰的标志
“2”
tri_up
类似奔驰的标志
“3”
tri_left
类似奔驰的标志
“4”
tri_right
类似奔驰的标志
“8”
octagon
八角形
“s”
square
正方形
“p”
pentagon
五角星
“*”
star
星号
“h”
hexagon1
六边形1
“H”
hexagon2
六边形2
“+”
plus
加号
“x”
x
x
“D”
diamond
钻石
“d”
thin_diamond
细的钻石
“ | “
vline
竖线
“-“
hline
水平方向的线
通过代码来绘制一下,效果就是这样:
当然,matplotlib还支持LaTeX 符号,也就是用来写数学公式的符号,比如:
但是总感觉还是不够的样子,比如我们要在图上显示机场,更希望的是用下面这样的图标:
那么matplotlib可不可以呢?
答案当然是么问题!看下面所示:
如果用matplotlib默认的图标绘制的效果应该是这样的:
那么我们用上面那个机场图标,绘制出来的效果就是这样的:(图标按比例缩小到0.4)
下面简单看看代码是怎么实现的:

首先看看需要哪些包

# pandas包用来读取csv文件
import pandas as pd
import matplotlib.pyplot as plt

# offsetbox这个类,是我们绘制图标用的重点类
import matplotlib.offsetbox as os

# read_png方法主要用来读取png图片
from matplotlib._png import read_png

下面先读取数据:

#cn.jpg是我们的背景图,我懒得用shape了,就直接在geoq上面截了一张图。
cn = plt.imread("cn.jpg")

# airportCN是中国机场的数据,有名称和经纬度,用Pandas直接读取了。
xypd = pd.read_csv("airportCN.csv", encoding = 'gb18030')

绘制默认图标的机场分布图:

plt.figure(figsize=(14, 14))

# imshow这个方法用来绘制背景图,extent里面是背景图的范围,参数是
# [xmin,xmax,ymin,ymax]
plt.imshow(cn, zorder=0, extent=[73.572,133.25,3.8,56.6])

# 绘制默认散点图,用红色的十字来标记
plt.scatter(xypd.x,xypd.y,marker="+",c="r",alpha = 1)
plt.show()

绘制的结果如下:
用我们指定的图片来绘制的代码如下:
# 前面还是一样,绘制背景图
fig,ax = plt.subplots(figsize=(14,14))
plt.imshow(cn, zorder=0, extent=[73.572,133.25,3.8,56.6])
for x1,y1 in zip(xypd.x,xypd.y):
#首先定义一个图片对象,缩放为0.4
image = os.OffsetImage(read_png("AirStrip.png"),zoom=0.4)
# 定义一个叫做AnnotationBbox的标记框
# 这个标记框里面放置我们定义好的图标
img = os.AnnotationBbox(image,(x1,y1),frameon=False)
#add_artist方法,把定义好的标记框加到画布上去
ax.add_artist(img)

绘制结果如下:
当然,你也可以根据不同的属性,选择不同的图标,我这里就不贴代码了,以上的代码和数据,在虾神是gitee代码库中,不知道的同学,在公众号发送消息:“图标”即可获取具体地址。
文章转载自虾神说D,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论