前言
利用Python實現賽博朋克數據可視化,廢話不多說~
讓我們愉快地開始吧~
開發工具
Python版本: 3.6.4
相關模塊:
mplcyberpunk模塊;
matplotlib模塊;
numpy模塊;
以及一些Python自帶的模塊。
環境搭建
安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。
賽博朋克2077》是一款由CD Projekt RED開發的動作角色類遊戲
虛擬和現實界限模糊,人工智能和人造人傻傻分不清楚,窮人和富人極度分化,到處充斥着恐怖主義。
這一期主要給大家介紹一款“賽博朋克”風格的Python庫,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,發現該庫的兩個主要功能
每個方法都用一次
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()
# 保存圖片
plt.savefig("defalut.png")
第默認格式
添加線條發光
線條發光+面積圖
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'")
plt.savefig("colormap.png")
5種配色方案的圖表
使用到的是ridge_map的山脊地圖
# 安裝
pip install ridge_map
# 安裝庫的依賴
pip install scikit-image==0.14.2
需要注意,安裝scikit-image時需指定0.14.2版本,否則會報錯
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')
plt.savefig('夏威夷.png')
夏威夷島的山脊地圖,朋克風格滿滿
世界地圖和歐洲地圖
臺灣省
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')
plt.savefig('臺灣省.png')
經緯度座標,可通過騰訊位置服務獲取
山脊線圖