一、南丁格尔图
import numpy as np
import matplotlib.pyplot as plt# 设置随机种子
np.random.seed(123)# 生成数据
categories = ['医疗', '教育', '交通', '食品', '住房', '娱乐', '服装', '其他']
values = np.random.randint(20, 100, size=len(categories))#设置中文字
plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题# 配色
macaron_colors = [
'#FFB7B2', '#FFDAC1', '#E2F0CB', '#B5EAD7',
'#C7CEEA', '#F8C8DC', '#F5E6C8', '#D4A5A5'
]# 创建极坐标图
plt.figure(figsize=(10, 8))
ax = plt.subplot(111, polar=True)# 计算角度
theta = np.linspace(0, 2*np.pi, len(categories), endpoint=False)
width = 2*np.pi / len(categories)# 绘制玫瑰图
bars = ax.bar(theta, values, width=width, color=macaron_colors,
alpha=0.85, edgecolor='white', linewidth=1.2)# 添加标签
ax.set_xticks(theta)
ax.set_xticklabels(categories, fontsize=11)
ax.set_title("2023年家庭支出分布 - 马卡龙色系版", pad=25, fontsize=15, fontweight='bold')# 隐藏y轴刻度
ax.set_yticks([])# 添加数值标签
for bar, value in zip(bars, values):
height = bar.get_height()
ax.text(bar.get_x() + bar.get_width()/2, height + 5, f"{value}%",
ha='center', va='bottom', fontsize=10,
fontweight='bold', color='#555555')
# 添加中心空白区域
ax.set_rorigin(-20)plt.tight_layout()
plt.show()
解释:这张南丁格尔玫瑰图使用随机种子123生成了8个消费类别的家庭支出比例数据。图中每个扇形区域代表一个支出类别(如医疗、教育等),扇形半径长度对应支出百分比(20%-100%的随机值)。通过极坐标系下的条形图变形,放大了较小数值的视觉差异,使各分类间的对比更加直观。图表采用明亮的tab10配色方案,每个扇形保持0.8的透明度并添加白色边框增强区分度。数值标签直接标注在扇形外沿,避免了传统饼图数值难以比较的问题。这种可视化形式特别适合展示周期性的分类数据比较,既保留了饼图的整体比例感,又通过半径长度强化了数值差异的视觉感知。
二、折线图
import numpy as np
import matplotlib.pyplot as plt# 设置随机种子
np.random.seed(42)# 生成数据
x = np.arange(1, 13) # 12个月份
y1 = np.random.randint(15, 35, size=12) # 城市A温度
y2 = np.random.randint(10, 30, size=12) # 城市B温度
y3 = np.random.randint(5, 25, size=12) # 城市C温度# 配色
colors = ['#FFB7B2', '#B5EAD7', '#C7CEEA']
line_styles = ['-', '--', '-.']# 创建图形
plt.figure(figsize=(12, 6))# 绘制折线图
for i, (y, color, style) in enumerate(zip([y1, y2, y3], colors, line_styles)):
plt.plot(x, y,
color=color,
linestyle=style,
linewidth=3,
marker='o',
markersize=8,
markerfacecolor='white',
markeredgewidth=2,
markeredgecolor=color,
label=f'城市{chr(65+i)}')# 添加标题和标签
plt.title('2023年三城市月均温度变化', fontsize=16, pad=20, fontweight='bold')
plt.xlabel('月份', fontsize=12)
plt.ylabel('温度(℃)', fontsize=12)
plt.xticks(x, [f'{i}月' for i in range(1, 13)], fontsize=10)# 添加网格和图例
plt.grid(True, linestyle='--', alpha=0.4)
plt.legend(fontsize=11, framealpha=0.8)# 调整y轴范围
plt.ylim(0, 40)# 添加数据标签
for i, (xi, y1i, y2i, y3i) in enumerate(zip(x, y1, y2, y3)):
offset = 0.5 if i%2 else -0.8 # 交替显示标签位置
plt.text(xi, y1i+offset, f'{y1i}℃', ha='center', fontsize=9)
plt.text(xi, y2i+offset, f'{y2i}℃', ha='center', fontsize=9)
plt.text(xi, y3i+offset, f'{y3i}℃', ha='center', fontsize=9)plt.tight_layout()
plt.show()
解释:这张折线图使用随机种子42生成了三个城市12个月的模拟温度数据,采用马卡龙色系(柔粉色、薄荷绿和淡紫色)区分不同城市。每条折线使用3像素粗的线条配合不同线型(实线、虚线和点划线),并在每个数据点位置添加了带白色填充的圆形标记,边缘采用与线条相同的颜色描边。温度数值标签交替显示在折线上下方以避免重叠,所有月份标签完整显示在x轴。图表添加了浅灰色虚线网格作为参考线,右上角的图例采用半透明背景,整体设计既保持了专业的数据展示功能,又通过柔和的配色营造出舒适的视觉体验,特别适合需要展示时间序列数据变化趋势的场景。
三、饼图
import numpy as np
import matplotlib.pyplot as plt# 设置随机种子
np.random.seed(2023)# 生成数据
categories = ['电子产品', '服装鞋帽', '家居用品', '食品饮料', '美妆个护', '图书文娱']
values = np.random.randint(5, 30, size=len(categories))
explode = (0.1, 0, 0, 0, 0, 0) # 突出显示第一类# 马卡龙色系配色
macaron_colors = [
'#FFB7B2', # 樱花粉
'#FFDAC1', # 奶油橙
'#E2F0CB', # 薄荷绿
'#B5EAD7', # 蒂芙尼蓝
'#C7CEEA', # 淡紫色
'#F8C8DC' # 玫瑰粉
]# 创建饼图
plt.figure(figsize=(10, 8))
wedges, texts, autotexts = plt.pie(values,
colors=macaron_colors,
labels=categories,
autopct='%1.1f%%',
startangle=90,
explode=explode,
shadow=True,
textprops={'fontsize': 12},
wedgeprops={'edgecolor':'white', 'linewidth':1.5})# 设置标题
plt.title('2023年电商平台商品类别销售占比', fontsize=16, pad=20, fontweight='bold')# 调整百分比标签样式
for autotext in autotexts:
autotext.set_color('#555555') # 深灰色文字
autotext.set_fontweight('bold')# 添加图例
plt.legend(wedges, categories,
title="商品类别",
loc="center left",
bbox_to_anchor=(1, 0, 0.5, 1),
fontsize=11)plt.tight_layout()
plt.show()
解释:本饼图基于随机种子2023生成的模拟数据,展示了电商平台六大商品类别的销售占比分布。图表采用90度起始角度,使占比最大的"电子产品"类别位于视觉焦点位置,并通过0.1的分离距离加以强调。各扇区面积精确对应随机生成的5-30区间数值分布,百分比标签以白色加粗字体显示,确保在深色扇区上保持可读性。阴影效果的加入增强了图表的立体感和层次感,使各类别间的边界更加清晰。这种可视化形式有效呈现了整体中各组成部分的相对比例关系,特别是突出了主导类别与其他类别之间的显著差异。饼图的圆形特性自然地传达了100%的整体概念,而精确到小数点后一位的百分比标注则提供了量化的比较基准。
四、心得体会
数据可视化实践让我深刻体会到南丁格尔玫瑰图、折线图和饼图的独特价值与组合魅力。南丁格尔图通过半径和角度的双重编码,将时序数据的周期性特征转化为直观的扇形面积对比,特别适合呈现24小时营业数据等循环规律;折线图则以简洁的线条走向,清晰刻画数据随时间的连续变化趋势,是分析销售增长、用户活跃度等趋势的首选;饼图则通过扇形比例,将整体与部分的关系可视化,在展示市场份额、预算分配等构成信息时无可替代。这三种图表的组合使用能够构建起"宏观趋势-微观构成-周期规律"的完整分析框架:折线图把握整体走向,饼图解析关键节点构成,南丁格尔图揭示周期性特征。