import numpy as np
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建模拟数据:5个城市4项人文指标评分
cities = ['北京', '上海', '广州', '成都', '武汉']
indicators = ['文化设施', '教育投入', '文化遗产', '阅读指数']
data = np.random.randint(50, 95, size=(5, 4)) # 5城市×4指标
# 绘制基础热力图
plt.figure(figsize=(10, 6))
heatmap = plt.imshow(data, cmap='YlOrRd') # 使用黄-橙-红色系
# 添加坐标轴标签
plt.xticks(np.arange(len(indicators)), indicators)
plt.yticks(np.arange(len(cities)), cities)
# 添加颜色条
plt.colorbar(heatmap, label='评分值')
# 添加标题
plt.title('五大城市人文发展指标热力图', pad=20)
# 显示图表
plt.show()
plt.figure(figsize=(10, 6))
heatmap = plt.imshow(data, cmap='Blues') # 更换为蓝色系
# 添加数值标注
for i in range(len(cities)):
for j in range(len(indicators)):
plt.text(j, i, f'{data[i,j]}',
ha='center', va='center',
color='w' if data[i,j] > 70 else 'k') # 根据背景色调整文字颜色
#当数据值 data[i,j] > 70 时,文字颜色设为白色(w),否则设为黑色(k)。
#目的:通过黑白对比度适应不同背景色。例如,深色背景(如热力图中高值区域)适合白色文字,浅色背景(低值区域)适合黑色文字。
# 美化设置
plt.xticks(np.arange(len(indicators)), indicators, rotation=45)
plt.yticks(np.arange(len(cities)), cities)
plt.colorbar(heatmap, label='评分值')
plt.title('五大城市人文发展指标热力图(带数值标注)', pad=20)
plt.tight_layout()
plt.show()
任务:分析不同省份文化产业各维度发展水平
provinces = ['江苏', '浙江', '广东']
dimensions = ['出版业', '影视制作', '艺术表演', '文化场馆', '数字创意']
culture_data = np.array([
[85, 78, 82, 88, 76],
[82, 85, 79, 83, 81],
[78, 76, 85, 79, 84]
])
plt.figure(figsize=(10, 6))
plt.imshow(culture_data, cmap='viridis')
plt.xticks(np.arange(len(dimensions)), dimensions)
plt.yticks(np.arange(len(provinces)), provinces)
plt.colorbar(label='评分')
plt.title('不同省份文化产业发展水平')
plt.grid(False)
plt.show()
应用场景:
社会学:不同收入群体的消费水平比较
教育学:不同班级成绩分布对比
心理学:实验组与控制组的反应时分析
经济学:各地区房价分布研究
import numpy as np
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
method1 = np.random.normal(75, 8, 50)
method2 = np.random.normal(85, 6, 50)
method3 = np.random.normal(70, 10, 50)
data = [method1, method2, method3]
labels = ['传统教学', '混合教学', '在线教学']
plt.figure(figsize=(10, 6))
box = plt.boxplot(data, labels=labels, patch_artist=True)
colors = ['#FF9999', '#66B2FF', '#99FF99']
for patch, color in zip(box['boxes'], colors):
patch.set_facecolor(color)
plt.title('不同教学方法效果对比', fontsize=16)
plt.ylabel('测试成绩', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.4)
plt.show()
任务:比较不同年龄段社交媒体使用时长
age_20s = np.random.normal(120, 30, 100)
age_30s = np.random.normal(90, 25, 100)
age_40s = np.random.normal(60, 20, 100)
age_50s = np.random.normal(40, 15, 100)
data = [age_20s, age_30s, age_40s, age_50s]
labels = ['20岁', '30岁', '40岁', '50岁']
plt.figure(figsize=(10, 6))
plt.boxplot(data, labels=labels, patch_artist=True, showmeans=True)
plt.title('不同年龄段社交媒体使用时长对比')
plt.ylabel('每日使用时长(分钟)')
plt.grid(axis='y', linestyle='--', alpha=0.3)
plt.show()
请根据上述示例自行完成热力图和箱线图综合练习。
### 3.1 热力图实践
任务要求:
- 分析各省文化产业指标相关性
- 使用coolwarm色系
- 标注显著性标记(p<0.05)
实现步骤:
- 计算相关系数矩阵
- 设置vmin=-1, vmax=1
- 添加星号标注
| 参数 | 说明 | 示例值 |
|---|---|---|
positions |
箱体位置 | [1,2,4,5] |
widths |
箱体宽度 | widths=0.6 |
showmeans |
显示均值 | showmeans=True |
meanline |
均值线样式 | meanline=True |
notch |
显示置信区间 | notch=True |
通过本课程的学习,希望同学们能够掌握这两种高级图表的绘制方法,在人文社科研究中更全面地展示和分析数据特征。