上一篇
案例上手python数据可视化
- 行业动态
- 2025-05-14
- 2
该案例通过Python的Matplotlib与Seaborn库实现数据可视化,读取CSV文件后清洗数据,绘制折线图展示销售趋势,柱状图对比区域业绩,结合颜色标注与注释提升可读性,直观
数据可视化基础工具选择
Python中常用的数据可视化库包括:
| 库名 | 特点 |
|————-|———————————————————————-|
| Matplotlib | 基础绘图库,适合静态图表制作,语法灵活但较繁琐 |
| Seaborn | 基于Matplotlib的高级接口,提供美观的默认样式和统计图表 |
| Plotly | 交互式图表库,支持浏览器端展示 |
| Pandas | 内置基础绘图功能,适合快速生成简单图表 |
| Altair | 声明式绘图库,适合快速生成复杂图表 |
实战案例:Matplotlib基础折线图
场景:展示某店铺2023年月度销售额变化趋势
import matplotlib.pyplot as plt import pandas as pd # 数据准备 data = {'月份': ['1月','2月','3月','4月','5月'], '销售额': [2800,3400,3600,4200,4800]} df = pd.DataFrame(data) # 绘制折线图 plt.figure(figsize=(8,5)) plt.plot(df['月份'], df['销售额'], marker='o', linestyle='-', color='b')'2023年月度销售额趋势') plt.xlabel('月份') plt.ylabel('销售额(元)') plt.grid(True) plt.show()
进阶案例:Seaborn分类统计图
场景:分析不同地区客户购买金额分布
import seaborn as sns import matplotlib.pyplot as plt # 模拟数据 data = { '地区': ['华东']50 + ['华南']40 + ['华北']30 + ['西部']20, '金额': np.random.randint(100,1000,140) } df = pd.DataFrame(data) # 箱线图展示 plt.figure(figsize=(10,6)) sns.boxplot(x='地区', y='金额', data=df, palette='Set2')'各地区客户购买金额分布') plt.xlabel('地区') plt.ylabel('购买金额(元)') plt.show()
动态可视化案例:Plotly交互图表
场景:实时展示网站访问量变化
import plotly.express as px import pandas as pd # 生成模拟数据 df = pd.DataFrame({ '时间': pd.date_range(start='2023-01-01', periods=100, freq='D'), '访问量': np.random.randint(50,200,100) }) # 创建交互式折线图 fig = px.line(df, x='时间', y='访问量', title='网站日访问量趋势') fig.update_traces(mode='markers+lines') fig.show()
多图联动案例:Pandas集成绘图
场景:对比不同产品线销售数据
import pandas as pd import matplotlib.pyplot as plt # 构造数据集 data = { '产品': ['A']4 + ['B']4 + ['C']4, '季度': [1,2,3,4]3, '销量': [200,220,250,300,150,180,210,230,100,120,140,160] } df = pd.DataFrame(data) # 分组绘制柱状图 ax = df.pivot('季度','产品','销量').plot(kind='bar')'各产品线季度销量对比') plt.xlabel('季度') plt.ylabel('销量') plt.legend(title='产品') plt.show()
地理可视化案例:Folium地图标记
场景:展示连锁店地理位置分布
import folium import pandas as pd # 门店数据 data = { '店名': ['门店A','门店B','门店C'], '地址': ['北京市朝阳区', '上海市浦东新区', '广州市天河区'], '销量': [120,85,150] } df = pd.DataFrame(data) # 创建地图对象 m = folium.Map(location=[35,105], zoom_start=5) # 添加标记点 for idx, row in df.iterrows(): folium.Marker( location=[39.9,116.4] if row['地址']=='北京市朝阳区' else [31.2,121.5] if row['地址']=='上海市浦东新区' else [23.1,113.3], popup=f"{row['店名']}: 销量{row['销量']}", icon=folium.Icon(color='red', icon='info-sign') ).add_to(m) m.save('store_map.html')
问题与解答专栏
Q1:如何调整Seaborn图表的中文显示字体?
A:需要设置Matplotlib的字体配置,推荐使用微软雅黑:
import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 指定中文字体 mpl.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
Q2:如何处理数据中的空值对可视化的影响?
A:建议采用以下策略:
- 数据清洗阶段:
df.dropna()
删除含空值行,或df.fillna()
填充默认值 - 可视化前检查:使用
df.isnull().sum()
统计空值数量 - 特殊处理:在绘图时设置
min_count=1
允许空值存在(仅限部分