#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ K/Y/M三链理论可视化工具 基于权力符号考古学理论,可视化展示三链功能关系和文明发展轨迹 """ import matplotlib.pyplot as plt import numpy as np from matplotlib.patches import Circle, Wedge, Polygon from matplotlib.collections import PatchCollection import matplotlib.patches as mpatches class KYMChainVisualizer: """K/Y/M三链理论可视化类""" def __init__(self): self.fig = None self.ax = None # 三链颜色定义 self.chain_colors = { 'K': '#1f77b4', # 蓝色 - 秩序 'Y': '#2ca02c', # 绿色 - 道德 'M': '#d62728' # 红色 - 信仰 } # 三链功能描述 self.chain_descriptions = { 'K': {'name': 'K链(秩序)', 'function': '宇宙的"主程序",负责空间秩序'}, 'Y': {'name': 'Y链(道德)', 'function': '"执行者",负责道德和物理操作'}, 'M': {'name': 'M链(信仰)', 'function': '"信仰",负责时间预测和救赎'} } def create_functional_triangle(self, k_weight, y_weight, m_weight, title="三链功能关系图"): """创建三链功能三角形图""" self.fig, self.ax = plt.subplots(1, 1, figsize=(10, 8)) # 创建等边三角形 triangle_vertices = np.array([ [0, 0], # K顶点(左下) [1, 0], # Y顶点(右下) [0.5, np.sqrt(3)/2] # M顶点(顶部) ]) # 绘制三角形边框 triangle = Polygon(triangle_vertices, closed=True, fill=False, edgecolor='black', linewidth=2) self.ax.add_patch(triangle) # 计算重心坐标(功能平衡点) total_weight = k_weight + y_weight + m_weight k_norm = k_weight / total_weight y_norm = y_weight / total_weight m_norm = m_weight / total_weight # 计算功能点在三角形内的坐标 x = k_norm * triangle_vertices[0][0] + y_norm * triangle_vertices[1][0] + m_norm * triangle_vertices[2][0] y = k_norm * triangle_vertices[0][1] + y_norm * triangle_vertices[1][1] + m_norm * triangle_vertices[2][1] # 绘制功能点 self.ax.scatter(x, y, s=200, c='gold', edgecolors='black', linewidth=2, zorder=5) # 绘制到各顶点的连线 for i, (vertex, color, weight) in enumerate(zip(triangle_vertices, [self.chain_colors['K'], self.chain_colors['Y'], self.chain_colors['M']], [k_weight, y_weight, m_weight])): self.ax.plot([x, vertex[0]], [y, vertex[1]], color=color, linewidth=weight*2, alpha=0.7) # 添加顶点标签 self.ax.text(triangle_vertices[0][0]-0.1, triangle_vertices[0][1]-0.1, 'K链\n秩序', ha='right', va='top', bbox=dict(boxstyle="round,pad=0.3", facecolor=self.chain_colors['K'], alpha=0.8)) self.ax.text(triangle_vertices[1][0]+0.1, triangle_vertices[1][1]-0.1, 'Y链\n道德', ha='left', va='top', bbox=dict(boxstyle="round,pad=0.3", facecolor=self.chain_colors['Y'], alpha=0.8)) self.ax.text(triangle_vertices[2][0], triangle_vertices[2][1]+0.1, 'M链\n信仰', ha='center', va='bottom', bbox=dict(boxstyle="round,pad=0.3", facecolor=self.chain_colors['M'], alpha=0.8)) # 添加功能点标签 self.ax.text(x, y-0.05, f'功能平衡点\nK:{k_weight} Y:{y_weight} M:{m_weight}', ha='center', va='top', fontsize=10, bbox=dict(boxstyle="round,pad=0.3", facecolor='lightgray')) # 设置图形属性 self.ax.set_xlim(-0.2, 1.2) self.ax.set_ylim(-0.2, 1.2) self.ax.set_aspect('equal') self.ax.axis('off') self.ax.set_title(title, fontsize=16, fontweight='bold', pad=20) return self.fig, self.ax def create_civilization_timeline(self, civilizations_data): """创建文明发展时间线图""" fig, ax = plt.subplots(1, 1, figsize=(15, 8)) # 设置时间轴 time_range = (-3000, 2000) # 从公元前3000年到公元2000年 ax.set_xlim(time_range) # 创建文明轨迹 y_positions = {} current_y = 0 for civ in civilizations_data: # 为每个文明分配y轴位置 if civ['name'] not in y_positions: y_positions[civ['name']] = current_y current_y += 1 y_pos = y_positions[civ['name']] # 绘制文明时间段 start_time = civ['start'] end_time = civ['end'] # 计算三链权重 k_weight = civ.get('k_weight', 0.33) y_weight = civ.get('y_weight', 0.33) m_weight = civ.get('m_weight', 0.34) # 创建颜色渐变(基于三链权重) color = np.array([ self.chain_colors['K'][0] * k_weight, self.chain_colors['Y'][1] * y_weight, self.chain_colors['M'][2] * m_weight ]) # 绘制时间段 ax.plot([start_time, end_time], [y_pos, y_pos], color=color, linewidth=8, alpha=0.8) # 添加文明标签 ax.text(start_time, y_pos + 0.1, civ['name'], fontsize=10, ha='left', va='bottom') # 添加三链权重标签 ax.text((start_time + end_time)/2, y_pos - 0.1, f'K:{k_weight:.2f} Y:{y_weight:.2f} M:{m_weight:.2f}', fontsize=8, ha='center', va='top') # 设置图形属性 ax.set_xlabel('时间(公元前/公元)', fontsize=12) ax.set_ylabel('文明', fontsize=12) ax.set_title('文明发展时间线与三链权重变化', fontsize=16, fontweight='bold') # 添加图例 legend_elements = [ mpatches.Patch(color=self.chain_colors['K'], label='K链(秩序)'), mpatches.Patch(color=self.chain_colors['Y'], label='Y链(道德)'), mpatches.Patch(color=self.chain_colors['M'], label='M链(信仰)') ] ax.legend(handles=legend_elements, loc='upper right') # 添加时间网格 ax.grid(True, alpha=0.3) return fig, ax def create_chain_network(self, nodes, edges): """创建三链关联网络图""" fig, ax = plt.subplots(1, 1, figsize=(12, 10)) # 设置节点位置(圆形布局) angles = np.linspace(0, 2*np.pi, len(nodes), endpoint=False) radius = 5 node_positions = {} for i, node in enumerate(nodes): x = radius * np.cos(angles[i]) y = radius * np.sin(angles[i]) node_positions[node] = (x, y) # 绘制边 for edge in edges: source, target, weight, chain_type = edge x1, y1 = node_positions[source] x2, y2 = node_positions[target] # 根据链类型设置颜色 color = self.chain_colors.get(chain_type, 'gray') # 绘制边 ax.plot([x1, x2], [y1, y2], color=color, linewidth=weight*3, alpha=0.7) # 绘制节点 for node, (x, y) in node_positions.items(): # 根据节点类型设置颜色 if 'K' in node: color = self.chain_colors['K'] elif 'Y' in node: color = self.chain_colors['Y'] elif 'M' in node: color = self.chain_colors['M'] else: color = 'lightgray' # 绘制节点 ax.scatter(x, y, s=300, c=color, edgecolors='black', linewidth=2, alpha=0.8) # 添加节点标签 ax.text(x, y, node, ha='center', va='center', fontsize=9, fontweight='bold') # 设置图形属性 ax.set_xlim(-radius-1, radius+1) ax.set_ylim(-radius-1, radius+1) ax.set_aspect('equal') ax.axis('off') ax.set_title('三链符号关联网络', fontsize=16, fontweight='bold') return fig, ax def demo_visualizations(): """演示可视化功能""" visualizer = KYMChainVisualizer() # 演示1:三链功能关系图 print("=== 演示1:三链功能关系图 ===") fig1, ax1 = visualizer.create_functional_triangle( k_weight=0.4, y_weight=0.3, m_weight=0.3, title="商朝晚期三链功能关系(K链过度)" ) plt.show() # 演示2:文明发展时间线 print("=== 演示2:文明发展时间线 ===") civilizations = [ {'name': '商朝', 'start': -1600, 'end': -1046, 'k_weight': 0.6, 'y_weight': 0.2, 'm_weight': 0.2}, {'name': '周朝', 'start': -1046, 'end': -256, 'k_weight': 0.3, 'y_weight': 0.5, 'm_weight': 0.2}, {'name': '罗马帝国', 'start': -27, 'end': 476, 'k_weight': 0.5, 'y_weight': 0.3, 'm_weight': 0.2}, {'name': '玛雅文明', 'start': 200, 'end': 900, 'k_weight': 0.2, 'y_weight': 0.3, 'm_weight': 0.5}, {'name': '印加帝国', 'start': 1200, 'end': 1533, 'k_weight': 0.3, 'y_weight': 0.5, 'm_weight': 0.2} ] fig2, ax2 = visualizer.create_civilization_timeline(civilizations) plt.show() # 演示3:三链关联网络 print("=== 演示3:三链关联网络 ===") nodes = ['昆仑(K)', 'Kósmos(K)', '大禹(Y)', '印加(Y)', '摩西(M)', '玛雅(M)', '秩序', '道德', '信仰'] edges = [ ('昆仑(K)', '秩序', 0.8, 'K'), ('Kósmos(K)', '秩序', 0.7, 'K'), ('大禹(Y)', '道德', 0.9, 'Y'), ('印加(Y)', '道德', 0.8, 'Y'), ('摩西(M)', '信仰', 0.9, 'M'), ('玛雅(M)', '信仰', 0.8, 'M'), ('秩序', '道德', 0.6, 'K'), ('道德', '信仰', 0.5, 'Y'), ('信仰', '秩序', 0.4, 'M') ] fig3, ax3 = visualizer.create_chain_network(nodes, edges) plt.show() if __name__ == "__main__": demo_visualizations()