270 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
| #!/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() |