赛博朋克这么火,如果与Python结合,能有多酷?

大数据文摘授权转载自法纳斯特

《赛博朋克2077》,最近一款非常火的单机游戏~

游戏的背景设定在了2077年,一个科技高度发达但却混乱无序的“ 赛博朋克 ”都市当中。

在这个世界里,虽然科技高度发展,但是人类的生活水平却极度低下,或者说穷人的生活水平极度低下。

而且,除了极少部分的资本富人,剩下的全是穷人。

所以,这就是一个极端的世界,包含着非常多的元素 。在视觉上,繁华的立体城市,到处是霓虹灯,人造光是所有的光源,甚至没有阳光。

对应的,在贫民窟,就是黑暗、潮湿。

虚拟和现实界限模糊,人工智能和人造人傻傻分不清楚,穷人和富人极度分化,到处充斥着恐怖主义。

总之就是一个绝对的反乌托邦世界,如果你感兴趣可以去深入了解一下,就先点到为止咯!

这期主要是给大家介绍一款 “赛博朋克”风格的Python库「mplcyberpunk」

GitHub:

https://github.com/dhaitz/mplcyberpunk

首先通过pip安装。

pip install mplcyberpunk

由于作者没有编写使用文档,而且只给了一部分的示例代码…

研究起来,是真的难搞啊!

先来看第一个示例。

import matplotlib.pyplot as plt

import mplcyberpunk

# 添加样式

plt.style.use( “cyberpunk” )

plt.plot([ 1 , 3 , 9 , 5 , 2 , 1 , 1 ], marker= ‘o’ )

plt.plot([ 4 , 5 , 5 , 7 , 9 , 8 , 6 ], marker= ‘o’ )

# 设置线条发光+面积图

mplcyberpunk.add_glow_effects()

plt.show()

得到一个线条发光的面积图。

确实很符合赛博朋克的霓虹灯风格,人造光源。

通过查看库的源码文件core.py,发现该库的两个主要功能。

make_lines_glow (线条发光)和 add_underglow (线条面积图)。

下面我们将每个方法都用一次。

import numpy as np

import mplcyberpunk

import matplotlib.pyplot as plt

plt.style.use( “cyberpunk” )

# 数据

x = np.arange( -7 , 7 , 0.1 )

y1 = np.sin(x)

y2 = np.sin(x) + x

y3 = np.sin(x) * x

y4 = np.sin(x) / x

plt.plot(x, y1)

plt.plot(x, y2)

plt.plot(x, y3)

plt.plot(x, y4)

# 线条发光

mplcyberpunk.make_lines_glow()

# 面积图

mplcyberpunk.add_underglow()

# 保存图片

“defalut.png”

)

第一个是默认格式,第二个是添加线条发光,第三个是线条发光+面积图。

和作者给的示例图,差了标题和图例,小伙伴们可以自行添加~

此外还可以自定义一些其他类型的颜色。

默认 colormap cool

import matplotlib.pyplot as plt

from matplotlib import cm

import mplcyberpunk

import numpy as np

# time

t = np.arange( 0 , 6.4 , 0.1 )

# frequency

f = 1

amplitudes = np.arange( -10 , 11 , 1 )

# amplitude

A = [x * np.cos(f*t) for x in amplitudes]

# 设置颜色样式,cool、spring、winter、tab20、coolwarm

colormap_sect = np.linspace( 0 , 1 , len(amplitudes))

colors = [cm.coolwarm(x) for x in colormap_sect]

plt.rcParams[ ‘figure.figsize’ ] = [ 6 , 4 ]

plt.style.use( “cyberpunk” )

plt.xlim(right= 6.3 )

for i in range( 21 ):

plt.plot(t, A[i], color=colors[i])

mplcyberpunk.make_lines_glow()

# 标题名,cool、spring、winter、tab20、coolwarm

plt.title( “Colormap: ‘coolwarm'” )

“colormap.png”

)

得到5种配色方案的图表。

看起来,都很炫!

最后还可以生成“赛博朋克”风格的地图。

使用到的是 ridge_map 的山脊地图。

GitHub:

https://github.com/ColCarroll/ridge_map

# 安装

pip install ridge_map

# 安装库的依赖

pip install scikit-image==0.14.2

这里需要注意,安装 scikit-image 时需指定0.14.2版本,否则会报错。

由于 ridge_map 这个库内容比较多,就不展开说了。

import matplotlib.font_manager as fm

import matplotlib.pyplot as plt

from ridge_map import RidgeMap

import mplcyberpunk

# 赛博朋克样式

plt.style.use( “cyberpunk” )

# 中文显示

plt.rcParams[ ‘font.sans-serif’ ] = [ ‘SimHei’ ] # Windows

plt.rcParams[ ‘font.sans-serif’ ] = [ ‘Hiragino Sans GB’ ] # Mac

plt.rcParams[ ‘axes.unicode_minus’ ] = False

# 字体

font_prop = fm.FontProperties(fname= “方正兰亭刊黑.ttf” )

# 获取数据,此处需特殊技巧才能成功

rm = RidgeMap(bbox=( -156.250305 , 18.890695 , 154.714966 , 20.275080 ), font=font_prop)

# 设置线条数,朝向,以及其他属性

values = rm.get_elevation_data(num_lines= 200 , viewpoint= ‘north’ )

values = rm.preprocess(values=values,

water_ntile= 10 ,

vertical_ratio= 240 )

# 设置标题,线条颜色,背景颜色等

rm.plot_map(values, label= “夏威夷” , kind= ‘gradient’ , line_color=plt.get_cmap( ‘spring’ ), background_color= ‘#212946’ )

‘夏威夷.png’

)

得到夏威夷岛的山脊地图,朋克风格满满!

作者提供的两个图,世界地图和欧洲地图,数据获取时间太久,所以选择放弃~

好像是可以使用 heightmaps 格式的图片直接实现,感兴趣的小伙伴,可以自己试试啦!

下面就来实验一个小一点的区域,台湾省。

import matplotlib.font_manager as fm

import matplotlib.pyplot as plt

from ridge_map import RidgeMap

import mplcyberpunk

# 赛博朋克样式

plt.style.use( “cyberpunk” )

# 中文显示

plt.rcParams[ ‘font.sans-serif’ ] = [ ‘SimHei’ ] # Windows

plt.rcParams[ ‘font.sans-serif’ ] = [ ‘Hiragino Sans GB’ ] # Mac

plt.rcParams[ ‘axes.unicode_minus’ ] = False

# 字体

font_prop = fm.FontProperties(fname= “方正兰亭刊黑.ttf” )

# 获取数据,此处需特殊技巧才能成功

rm = RidgeMap(bbox=( 122.014 , 25.344 , 120.036 , 21.902 ), font=font_prop)

# 设置线条数,朝向,以及其他属性

values = rm.get_elevation_data(num_lines= 200 , viewpoint= ‘north’ )

values = rm.preprocess(values=values,

water_ntile= 10 ,

vertical_ratio= 240 )

# 设置标题,线条颜色,背景颜色等

rm.plot_map(values, label= “台湾省” , kind= ‘gradient’ , line_color=plt.get_cmap( ‘spring’ ), background_color= ‘#212946’ )

‘台湾省.png’

)

其中经纬度坐标,可通过腾讯位置服务获取。

得到台湾省的山脊线图。

不愧是高山民族,除了沿海平一点,其它都是山…

好了,本期分享到此就结束了,对于“赛博朋克”风格的柱状图、饼图等等,就让大家自己去探索吧。

点「在看」的人都变好看了哦!

大数据文摘
我还没有学会写个人说明!
上一篇

开房都要排队,这个剧越看越心酸

你也可能喜欢

评论已经被关闭。

插入图片