数据可视化→把抽象的数据“看得见”,让数据背后的规律、异常、趋势一目了然

原则 :

  • 信:准确表达,避免可视化的误导性
  • 达:高效传达,有效信息直接高效传达
  • 雅:赏欣悦目,设计美观的可视化(布局、配色)

可视化工具对比

可视化工具对比

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()
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐