南丁格尔图+折线图+饼图

一、南丁格尔图

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小时营业数据等循环规律;折线图则以简洁的线条走向,清晰刻画数据随时间的连续变化趋势,是分析销售增长、用户活跃度等趋势的首选;饼图则通过扇形比例,将整体与部分的关系可视化,在展示市场份额、预算分配等构成信息时无可替代。这三种图表的组合使用能够构建起"宏观趋势-微观构成-周期规律"的完整分析框架:折线图把握整体走向,饼图解析关键节点构成,南丁格尔图揭示周期性特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值