PYTHON基础技能 – 数据可视化中Matplotlib的10个精美图表

释放双眼,带上耳机,听听看~!

引言

Matplotlib作为Python中最受欢迎的绘图库之一,能够轻松应对从简单到复杂的数据可视化需求。本文将详细介绍10种常用且美观的图表类型及其绘制方法,帮助读者更好地理解和应用Matplotlib。

1. 基础设置

首先,我们需要进行一些基本的设置,以确保图表的美观性和可读性。


1
import&nbsp;matplotlib.pyplot&nbsp;as&nbsp;plt<br>import&nbsp;numpy&nbsp;as&nbsp;np<br><br>plt.style.use('seaborn')&nbsp;&nbsp;<em>#&nbsp;使用seaborn风格</em><br>plt.rcParams&#091;'font.sans-serif']&nbsp;=&nbsp;&#091;'SimHei']&nbsp;&nbsp;<em>#&nbsp;设置中文显示</em><br>plt.rcParams&#091;'axes.unicode_minus']&nbsp;=&nbsp;False&nbsp;&nbsp;<em>#&nbsp;正常显示负号</em>

2. 条形图 – 显示不同类别的数量差异

条形图非常适合比较不同类别之间的数值大小。例如,展示某公司不同部门的销售额。


1
<em>#&nbsp;数据准备</em><br>labels&nbsp;=&nbsp;&#091;'市场部',&nbsp;'销售部',&nbsp;'技术部']<br>sales&nbsp;=&nbsp;&#091;120,&nbsp;200,&nbsp;150]<br><br><em>#&nbsp;创建条形图</em><br>plt.figure(figsize=(8,&nbsp;6))<br>plt.bar(labels,&nbsp;sales,&nbsp;color='skyblue')<br>plt.title('各部门销售额')<br>plt.xlabel('部门')<br>plt.ylabel('销售额(万元)')<br>plt.show()

输出:你会看到一个清晰的条形图,展示了每个部门的销售额。这种图直观地反映了各个部门之间的业绩差异。

3. 折线图 – 展示随时间变化的趋势

折线图用来观察数据随时间的变化趋势再合适不过了。例如,股票价格波动。


1
<em>#&nbsp;生成数据</em><br>dates&nbsp;=&nbsp;np.arange(10)<br>prices&nbsp;=&nbsp;np.random.randn(10).cumsum()<br><br><em>#&nbsp;绘制折线图</em><br>plt.figure(figsize=(10,&nbsp;5))<br>plt.plot(dates,&nbsp;prices,&nbsp;marker='o',&nbsp;linestyle='-',&nbsp;color='g')<br>plt.title('股价走势')<br>plt.xlabel('日期')<br>plt.ylabel('价格')<br>plt.grid(True)<br>plt.show()

输出:一个简洁的折线图展现在眼前,清楚地表明了股价的变动轨迹。标记点(

1
marker='o'

)增加了可读性。

4. 散点图 – 探索变量间的关系

散点图能帮助我们发现两个变量之间的关系或模式。例如,研究收入与年龄之间的关联。


1
<em>#&nbsp;假设数据</em><br>ages&nbsp;=&nbsp;np.random.randint(20,&nbsp;60,&nbsp;size=100)<br>incomes&nbsp;=&nbsp;ages&nbsp;*&nbsp;1000&nbsp;+&nbsp;np.random.normal(0,&nbsp;50000,&nbsp;size=ages.shape)<br><br><em>#&nbsp;绘制散点图</em><br>plt.figure(figsize=(10,&nbsp;6))<br>plt.scatter(ages,&nbsp;incomes,&nbsp;alpha=0.6,&nbsp;edgecolors='w')<br>plt.title('年龄与收入关系')<br>plt.xlabel('年龄')<br>plt.ylabel('年收入')<br>plt.grid(True)<br>plt.show()

输出:这个散点图不仅美观,还揭示了年龄越大,收入越高的趋势。透明度(

1
alpha=0.6

)避免了数据点重叠带来的视觉混乱。

5. 饼图 – 表示各部分占比

饼图特别适合展示整体中的各个部分所占的比例。例如,不同产品的市场份额。


1
<em>#&nbsp;数据</em><br>products&nbsp;=&nbsp;&#091;'产品A',&nbsp;'产品B',&nbsp;'产品C',&nbsp;'产品D']<br>market_share&nbsp;=&nbsp;&#091;30,&nbsp;25,&nbsp;20,&nbsp;25]<br><br><em>#&nbsp;绘制饼图</em><br>plt.figure(figsize=(8,&nbsp;8))<br>plt.pie(market_share,&nbsp;labels=products,&nbsp;autopct='%1.1f%%',&nbsp;startangle=140)<br>plt.title('产品市场份额')<br>plt.axis('equal')&nbsp;&nbsp;<em>#&nbsp;确保饼图是圆形的</em><br>plt.show()

输出:一张清晰的饼图,精确地表现了每种产品在市场上的份额比例。这有助于快速了解哪个产品最受欢迎。

6. 直方图 – 分析数据分布

直方图用于显示数据的分布情况,特别是在连续数据集上非常有用。例如,可以用来分析考试成绩的分布情况。


1
<em>#&nbsp;生成模拟数据</em><br>scores&nbsp;=&nbsp;np.random.normal(loc=70,&nbsp;scale=15,&nbsp;size=1000)<br><br><em>#&nbsp;绘制直方图</em><br>plt.figure(figsize=(10,&nbsp;6))<br>plt.hist(scores,&nbsp;bins=20,&nbsp;edgecolor='black',&nbsp;alpha=0.7)<br>plt.title('考试成绩分布')<br>plt.xlabel('分数')<br>plt.ylabel('人数')<br>plt.grid(axis='y',&nbsp;linestyle='--',&nbsp;alpha=0.7)<br>plt.show()

输出:直方图清晰地展示了成绩的分布情况,可以看到大多数学生的分数集中在某个区间内,边缘分布的学生较少。这有助于老师了解学生的学习情况。

7. 箱形图 – 查看数据异常值

箱形图是一种统计图表,用于显示一组数据分散情况的五数概括(最小值、下四分位数、中位数、上四分位数、最大值),并能有效识别异常值。


1
<em>#&nbsp;生成数据</em><br>data&nbsp;=&nbsp;np.random.normal(loc=0,&nbsp;scale=1,&nbsp;size=(100,&nbsp;4))<br><br><em>#&nbsp;绘制箱形图</em><br>plt.figure(figsize=(10,&nbsp;6))<br>plt.boxplot(data,&nbsp;vert=False,&nbsp;patch_artist=True,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxprops=dict(facecolor="skyblue",&nbsp;color="black"),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;capprops=dict(color="black"),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whiskerprops=dict(color="black"),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flierprops=dict(color="red",&nbsp;markeredgecolor="red"),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;medianprops=dict(color="black"))<br>plt.title('数据分布箱形图')<br>plt.xlabel('数值')<br>plt.grid(axis='x',&nbsp;linestyle='--',&nbsp;alpha=0.7)<br>plt.show()

输出:箱形图展示了数据的五数概括,并且红色的点表示异常值。这样的图对于数据分析非常有帮助,能够快速发现数据中的异常情况。

8. 热力图 – 观察数据相关性

热力图通常用于观察矩阵数据的相关性或密度。例如,可以用来查看不同城市之间的气温分布。


1
<em>#&nbsp;生成数据</em><br>np.random.seed(0)<br>temperatures&nbsp;=&nbsp;np.random.rand(10,&nbsp;10)<br><br><em>#&nbsp;绘制热力图</em><br>plt.figure(figsize=(10,&nbsp;8))<br>plt.imshow(temperatures,&nbsp;cmap='hot',&nbsp;interpolation='nearest')<br>plt.colorbar(label='温度')<br>plt.title('城市气温分布')<br>plt.xticks(range(10),&nbsp;&#091;'城市%d'&nbsp;%&nbsp;i&nbsp;for&nbsp;i&nbsp;in&nbsp;range(10)])<br>plt.yticks(range(10),&nbsp;&#091;'城市%d'&nbsp;%&nbsp;i&nbsp;for&nbsp;i&nbsp;in&nbsp;range(10)])<br>plt.xlabel('城市')<br>plt.ylabel('城市')<br>plt.grid(False)<br>plt.show()

输出:热力图展示了不同城市之间的气温分布情况,颜色越深表示温度越高。这样的图对于地理学研究非常有用,能够直观地看出不同地区的温度差异。

9. 雷达图 – 比较多个维度

雷达图用于展示多维度数据,并且能够比较不同对象在各个维度上的表现。例如,可以用来比较不同员工在各项能力上的得分。


1
<em>#&nbsp;准备数据</em><br>categories&nbsp;=&nbsp;&#091;'技能A',&nbsp;'技能B',&nbsp;'技能C',&nbsp;'技能D',&nbsp;'技能E']<br>values&nbsp;=&nbsp;&#091;4,&nbsp;2,&nbsp;5,&nbsp;1,&nbsp;3]<br><br><em>#&nbsp;绘制雷达图</em><br>angles&nbsp;=&nbsp;np.linspace(0,&nbsp;2&nbsp;*&nbsp;np.pi,&nbsp;len(categories),&nbsp;endpoint=False).tolist()<br>values&nbsp;+=&nbsp;values&#091;:1]&nbsp;&nbsp;<em>#&nbsp;闭合图形</em><br>angles&nbsp;+=&nbsp;angles&#091;:1]<br><br>fig,&nbsp;ax&nbsp;=&nbsp;plt.subplots(figsize=(8,&nbsp;8),&nbsp;subplot_kw=dict(polar=True))<br>ax.fill(angles,&nbsp;values,&nbsp;color='skyblue',&nbsp;alpha=0.25)<br>ax.set_theta_offset(np.pi&nbsp;/&nbsp;2)<br>ax.set_theta_direction(-1)<br>ax.set_xticks(angles&#091;:-1])<br>ax.set_xticklabels(categories)<br>ax.set_rlabel_position(0)<br>plt.title('员工技能雷达图')<br>plt.show()

输出:雷达图展示了员工在各个技能上的得分情况,颜色填充使得图表更加美观。这样的图对于人力资源管理非常有用,能够快速了解员工的优势和不足。

10. 点状图 – 显示离散数据

点状图用于展示离散数据点,特别适用于小样本数据集。例如,可以用来展示不同班级的平均成绩。


1
<em>#&nbsp;准备数据</em><br>class_labels&nbsp;=&nbsp;&#091;'一班',&nbsp;'二班',&nbsp;'三班',&nbsp;'四班']<br>class_averages&nbsp;=&nbsp;&#091;75,&nbsp;80,&nbsp;85,&nbsp;90]<br><br><em>#&nbsp;绘制点状图</em><br>plt.figure(figsize=(10,&nbsp;6))<br>plt.scatter(class_labels,&nbsp;class_averages,&nbsp;s=100,&nbsp;color='green',&nbsp;marker='o',&nbsp;edgecolors='black')<br>plt.title('班级平均成绩')<br>plt.xlabel('班级')<br>plt.ylabel('平均成绩')<br>plt.grid(axis='y',&nbsp;linestyle='--',&nbsp;alpha=0.7)<br>plt.show()

输出:点状图展示了不同班级的平均成绩,大点(

1
s=100

)使得图表更加醒目。这样的图对于教育评估非常有用,能够快速了解不同班级的成绩情况。

实战案例:销售数据可视化

假设你是一家公司的数据分析师,你需要为销售团队制作一份销售报告。报告中需要包含以下信息:

1. 不同产品的销售额对比。2. 过去一年的月度销售额趋势。3. 不同地区销售额的分布情况。

我们可以使用前面介绍的各种图表来完成这份报告。

产品销售额对比


1
<em>#&nbsp;数据</em><br>products&nbsp;=&nbsp;&#091;'产品A',&nbsp;'产品B',&nbsp;'产品C',&nbsp;'产品D']<br>sales&nbsp;=&nbsp;&#091;120,&nbsp;200,&nbsp;150,&nbsp;180]<br><br><em>#&nbsp;绘制条形图</em><br>plt.figure(figsize=(10,&nbsp;6))<br>plt.bar(products,&nbsp;sales,&nbsp;color='skyblue')<br>plt.title('产品销售额对比')<br>plt.xlabel('产品')<br>plt.ylabel('销售额(万元)')<br>plt.grid(axis='y',&nbsp;linestyle='--',&nbsp;alpha=0.7)<br>plt.show()

月度销售额趋势


1
<em>#&nbsp;生成数据</em><br>months&nbsp;=&nbsp;&#091;'Jan',&nbsp;'Feb',&nbsp;'Mar',&nbsp;'Apr',&nbsp;'May',&nbsp;'Jun',&nbsp;'Jul',&nbsp;'Aug',&nbsp;'Sep',&nbsp;'Oct',&nbsp;'Nov',&nbsp;'Dec']<br>monthly_sales&nbsp;=&nbsp;np.random.randint(100,&nbsp;200,&nbsp;size=12)<br><br><em>#&nbsp;绘制折线图</em><br>plt.figure(figsize=(10,&nbsp;6))<br>plt.plot(months,&nbsp;monthly_sales,&nbsp;marker='o',&nbsp;linestyle='-',&nbsp;color='g')<br>plt.title('月度销售额趋势')<br>plt.xlabel('月份')<br>plt.ylabel('销售额(万元)')<br>plt.grid(axis='y',&nbsp;linestyle='--',&nbsp;alpha=0.7)<br>plt.show()

地区销售额分布


1
<em>#&nbsp;数据</em><br>regions&nbsp;=&nbsp;&#091;'华东',&nbsp;'华南',&nbsp;'华北',&nbsp;'华西']<br>regional_sales&nbsp;=&nbsp;&#091;300,&nbsp;250,&nbsp;200,&nbsp;150]<br><br><em>#&nbsp;绘制饼图</em><br>plt.figure(figsize=(8,&nbsp;8))<br>plt.pie(regional_sales,&nbsp;labels=regions,&nbsp;autopct='%1.1f%%',&nbsp;startangle=140)<br>plt.title('地区销售额分布')<br>plt.axis('equal')<br>plt.show()

通过这些图表,销售团队可以快速了解不同产品的销售额、月度销售额的趋势以及不同地区的销售额分布情况,从而制定相应的策略。

总结

本文详细介绍了Matplotlib中10种常用的图表类型及其绘制方法。这些图表不仅美观实用,还能帮助用户更好地理解和分析数据。通过实际案例的应用,我们进一步展示了如何利用这些图表来进行有效的数据可视化。希望本文能帮助读者掌握Matplotlib的核心功能,提高数据分析的能力。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

安全运维之道:发现、解决问题的有效闭环

2024-4-14 20:59:36

安全运维

稳定性建设 – 架构优化的关键策略

2025-2-11 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索