在推文使用R快速绘制“山峦图”(工具分享 | linemap-快速绘制山峦地图的R可视化包介绍),有小伙伴就问Python 能不能绘制类似的地图效果?答案是:当然啦!本期推文我们就使用Python-ridge_map包绘制山峦效果的地图可视化作品。主要内容如下:
ridge_map包作为Python第三方包就是为绘制“山峦”地图而生,其官网为:https://github.com/ColCarroll/ridge_map,官方提供的例子如下:(由于官网提供的例子都需要在线下载数据,但由于有的小伙伴无法科学上网,这里只提供效果图)
「样例1」:
from ridge_map import RidgeMap
RidgeMap().plot_map()
Sample_01
「样例2」:
from ridge_map import FontManager
font = FontManager('https://github.com/google/fonts/blob/master/ofl/uncialantiqua/UncialAntiqua-Regular.ttf?raw=True')
rm = RidgeMap((-156.250305,18.890695,-154.714966,20.275080), font=font.prop)
values = rm.get_elevation_data(num_lines=100)
rm.plot_map(values=rm.preprocess(values=values, lake_flatness=2, water_ntile=10, vertical_ratio=240),
label="Hawai'i",
label_y=0.85,
label_x=0.7,
label_size=60,
linewidth=2,
line_color=plt.get_cmap('ocean'),
kind='elevation')
(注:更多例子大家可参照官网,其数据都是在线获取,好多无法科学上网的小伙伴则很难进行练习)
鉴于网络问题,这一部分我们提供实例数据进行可视化教程绘制,使用的数据为png格式的DEM数据。这里需要使用cv2 包进行图片读取。
在绘制之前,我们需要对图片数据进行“转置”操作:
import cv2
import numpy as np
img_file = r"G:\middle_earth.png"
img = cv2.imread(img_file, 0)
height = img.shape[0]
line_interval = int(height / 150)
image_values = []
for i in reversed(range(img.shape[0])):
if (i % line_interval) == 0:
row_values = []
for j in range(img.shape[1]):
if (j % 1) == 0:
row_values.append(img[i][j])
image_values.append(row_values)
values_pro = np.array(image_values)
数据结果如下:
数据处理后
我们对比下数据处理之前的(注意红色框中内容):
数据处理后
接下来我们直接进行可视化绘制,这里直接给出绘图代码:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(9,6), dpi=100,facecolor="#EFEFE1")
ax.set_facecolor("#EFEFE1")
rm = RidgeMap()
values = rm.preprocess(values=values_pro,
water_ntile=20,
lake_flatness=2,
vertical_ratio=30)
# 可视化绘制
rm.plot_map(values=values,
label='',
label_y=0.2,
label_x=0.2,
label_size=30,
linewidth=.6,
line_color="black",
kind='elevation',
background_color="#EFEFE1",
ax=ax)
ax.text(.5,1.1,"Map Charts in Python Exercise 02:Ridge_map Exercise",transform = ax.transAxes,ha='center',
va='center',fontweight="bold",fontsize=15)
ax.text(.5,1.03, "processed map charts with Ridge_map",
transform = ax.transAxes,ha='center', va='center',fontsize = 10,color='black')
ax.text(.83,.0,'\nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 8,color='black')
plt.show()
最终可视化结果如下:
关注公众号 DataCharm ,后天回复 山峦地图 即可获取本文练习png数据哦!
这篇推文继续介绍了“山峦”地图的绘制,只不过使用的是Python语言绘制,喜欢的小伙伴可以尝试下。