第4章(1) 数据可视化matplotlib
·
数据可视化→把抽象的数据“看得见”,让数据背后的规律、异常、趋势一目了然
原则 :
- 信:准确表达,避免可视化的误导性
- 达:高效传达,有效信息直接高效传达
- 雅:赏欣悦目,设计美观的可视化(布局、配色)
可视化工具对比

matplotlib使用
1、折线图plot(看趋势)
# 绘制折线图
import matplotlib.pyplot as plt
from matplotlib import rcParams # 字体
rcParams['font.family'] = 'SimHei' #windows mac:STHeiti
#rcParams['font.sans-serif'] = 'SimHei' # 二选一
# 创建图表,设置大小
plt.figure(figsize=(10,5))
# 要绘图的数据
month = ['1月','2月','3月','4月']
sales = [100,150,80,130]
# 绘制折线图
plt.plot(month,sales,
label='产品A',
color='orange',
linewidth=2,
marker='o',)
# 添加标题
plt.title('2025年销售趋势',color='red',fontsize=20)
# 添加坐标轴标签
plt.xlabel('月份',fontsize=10)
plt.ylabel('销售额(万元)',fontsize=10)
# 添加图例
plt.legend(loc='upper left')
# 添加网格线
plt.grid(True,alpha=0.1,color='blue',linestyle='--')
#plt.grid(axis='y')
# 设置刻度字体大小
plt.xticks(rotation=0,fontsize=12)
plt.yticks(rotation=0,fontsize=12)
# 设置y轴范围
plt.ylim(0,160)
# 在每个数据点上显示数值
for x,y in zip(month,sales):
print(x,y)
plt.text(x,y+1,str(y),ha='center',va='bottom',fontsize=10)
# 显示图表
plt.show()
2、柱状图bar & 条形图 barh(类别之间对比)
# 绘制柱状图
import matplotlib.pyplot as plt
from matplotlib import rcParams # 字体
rcParams['font.family'] = 'SimHei' #windows mac:STHeiti
# 创建图表,设置大小
plt.figure(figsize=(10,5))
# 要绘制的数据
subjects = ['语文','数学','物理','科学']
scores = [85,92,78,88]
# 绘制柱状图
plt.bar(subjects,scores,
label='小红',
color='orange',
width=0.6,)
# 添加标题
plt.title('2025年成绩分布',color='red',fontsize=20)
# 添加坐标轴标签
plt.xlabel('科目',fontsize=10)
plt.ylabel('分数',fontsize=10)
# 添加图例
plt.legend(loc='upper right')
# 添加网格线
plt.grid(axis='y',alpha=0.1,color='blue',linestyle='--')
# 设置y轴范围
plt.ylim(0,100)
# 在每个数据点上显示数值
for x,y in zip(subjects,scores):
plt.text(x,y+1,str(y),ha='center',va='bottom',fontsize=10)
# 自动优化排版
plt.tight_layout()
# 显示图表
plt.show()
# 绘制条形图
import matplotlib.pyplot as plt
from matplotlib import rcParams # 字体
rcParams['font.family'] = 'SimHei' #windows mac:STHeiti
# 创建图表,设置大小
plt.figure(figsize=(10,5))
# 要绘制的数据
countries = ['United States','China','Japan','Germany','India']
gdp = [85,92,4,12,32]
# 绘制条形图
plt.barh(countries,gdp,)
# 添加标题
plt.title('2025年GDP排名',color='red',fontsize=20)
# 添加坐标轴标签
plt.xlabel('GDP',fontsize=10)
plt.ylabel('国家',fontsize=10)
# 自动优化排版
plt.tight_layout()
# 显示图表
plt.show()
3、饼图pie、环形图、爆炸饼图(整体组成比例)
- 饼图
# 绘制饼图
import matplotlib.pyplot as plt
from matplotlib import rcParams # 字体
rcParams['font.family'] = 'SimHei' #windows mac:STHeiti
# 创建图表,设置大小
plt.figure(figsize=(10,5))
# 要绘制的数据
things = ['学习','娱乐','运动','睡觉','其它']
times = [6,4,1,8,5]
colors = ['#66b3ff','#99ff99','#ffcc99','#ff9999','#ff4499'] # 配色
# 绘制饼图
plt.pie(times,labels=things,
autopct='%.2f%%', # 显示占比
startangle=90, # 启示角度
colors=colors
)
# 添加标题
plt.title('一天的时间分布',color='red',fontsize=20)
# 自动优化排版
plt.tight_layout()
# 显示图表
plt.show()

- 环形图
colors = ['#66b3ff','#99ff99','#ffcc99','#ff9999','#ff4499'] # 配色
# 绘制环形图
plt.pie(times,labels=things,
autopct='%.2f%%', # 显示占比
startangle=90, # 启示角度
colors=colors,
wedgeprops={'width':0.6}, # 设置圆环的宽度
pctdistance=0.7 # 设置百分比数字的位置
)
# 添加标题
plt.title('一天的时间分布',color='red',fontsize=20)
plt.text(0,0,'总计:\n100%',ha='center',va='center',fontsize=10)

- 爆炸饼图
explode = [0.1,0,0,0,0] # 设置突出块的位置
# 绘制爆炸式饼图
plt.pie(times,labels=things,
autopct='%.2f%%', # 显示占比
startangle=0, # 启示角度
colors=colors,
explode=explode,
shadow=True,
)

4、散点图 scatter(两变量相关性)
# 绘制散点图
import matplotlib.pyplot as plt
from matplotlib import rcParams # 字体
import random
rcParams['font.family'] = 'SimHei' #windows mac:STHeiti
# 创建图表,设置大小
plt.figure(figsize=(10,8))
# 要绘制的数据
x = []
y = []
for i in range(1000):
tmp = random.uniform(0,10)
x.append(tmp)
y.append(2*tmp + random.gauss(0,2))
# 绘制散点图
plt.scatter(x,y,
color='blue',
alpha=0.6,
s=20,
label='数据')
# 添加标题
plt.title('X变量与Y变量的关系',color='red',fontsize=20)
# 添加坐标轴的标签
plt.xlabel('X自变量',fontsize=10)
plt.ylabel('Y因变量',fontsize=10)
# 添加图例
plt.legend(loc='upper left')
# 添加网格线
plt.grid(True,alpha=0.1,color='blue',linestyle='--')
# 刻度大小
plt.xticks(rotation=0,fontsize=10)
plt.yticks(rotation=0,fontsize=10)
# 设置y轴范围
plt.ylim(0,30)
plt.plot([0,10],[0,20],color='orange',linewidth=2,linestyle='-')
# 自动优化排版
plt.tight_layout()
# 显示图表
plt.show()
5、箱线图 boxplot(数据分布、异常)
# 箱线图
import matplotlib.pyplot as plt
data = {
'语文':[82,85,88,70,97,76,84,83,95],
'数学':[75,80,79,93,88,82,87,89,82],
'英语':[70,72,68,65,78,80,85,90,95]
}
plt.figure(figsize=(8,6))
plt.boxplot(data.values(),tick_labels=data.keys())
plt.title('各科成绩分布(箱线图)')
plt.ylabel('分数')
plt.grid(True,axis='y',alpha=0.1,linestyle='--')
plt.show()
多个图的绘制方法(subplot)
# 多个图的绘制方法
import matplotlib.pyplot as plt
# 要绘图的数据
month = ['1','2','3','4']
sales = [100,150,80,130]
# 动态图表生成
f1 = plt.subplot(2,2,1) # 子图(行,列,索引)
f1.plot(month,sales)
f2 = plt.subplot(2,2,2) # 子图
f2.bar(month,sales)
f3 = plt.subplot(2,2,3) # 子图
f3.scatter(month,sales)
f4 = plt.subplot(2,2,4)
f4.barh(month,sales)
案例
# 分析案例:温度分析
# 1.导入库
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'Microsoft YaHei'
plt.figure(figsize=(10,5))
# 2.导入数据
df = pd.read_csv('data/weather.csv')
# 绘制气温趋势变化图
df['date'] = pd.to_datetime(df['date'])
df = df[df['date'].dt.year==2015]
df['temp_mean'] = (df['temp_max']+df['temp_min'])/2
plt.figure(figsize=(10,10))
plt.plot(df['date'],df['temp_max'],label='最高气温')
plt.plot(df['date'],df['temp_min'],label='最低气温')
plt.plot(df['date'],df['temp_mean'],label='平均气温')
plt.title('2015年气温变化趋势图')
plt.xlabel('日期')
plt.ylabel('温度',rotation=0)
plt.legend()
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)