asp.net 旅游网站开发,万网域名注册官网邮箱,wordpress链接跳转错误,百度关键词优化软件排名目录 文章导航一、介绍二、安装Matplotlib三、导入Matplotlib四、设置可以中文显示四、常用图形1、散点图#xff08;Scatter Plot#xff09;2.1、线性图#xff08;Line Plot#xff09;2.2、堆叠折线图2.3、多图例折线图3.1、柱状图/条形图#xff08;Bar Chart#x… 目录 文章导航一、介绍二、安装Matplotlib三、导入Matplotlib四、设置可以中文显示四、常用图形1、散点图Scatter Plot2.1、线性图Line Plot2.2、堆叠折线图2.3、多图例折线图3.1、柱状图/条形图Bar Chart3.2 堆叠条形图4、直方图Histogram5、饼图Pie Chart6、箱线图Box Plot7、子图Subplot8、指标卡 文章导航
【一 简明数据分析进阶路径介绍文章导航】
一、介绍
Matplotlib是一个Python的2D绘图库它可以在各种硬拷贝格式和跨平台的交互式环境中生成出版质量级别的图形。它是Python中最常用的可视化工具之一功能非常强大可以调用函数轻松地绘制出数据分析中的各种图形如折线图、条形图、柱状图、散点图、饼图等。
二、安装Matplotlib
pip install matplotlib三、导入Matplotlib
import matplotlib.pyplot as plt四、设置可以中文显示
from matplotlib import font_manager # 设置Matplotlib配置参数
plt.rcParams[font.sans-serif] [SimHei] # 使用黑体
plt.rcParams[axes.unicode_minus] False # 正确显示负号四、常用图形
1、散点图Scatter Plot
利用坐标点散点的分布形态反映特征间的相关关系。常用于展示两个变量之间的关系。
import numpy as np # 假设我们有一些关于学生分数和学习时间的数据
scores np.random.randint(40, 100, size50) # 学生分数
study_hours np.random.rand(50) * 20 # 学习时间小时 plt.figure(figsize(8, 6)) # 设置图形大小
plt.scatter(study_hours, scores, colorblue, edgecolorblack, alpha0.7) # 绘制散点图
plt.xlabel(学习时间 (小时))
plt.ylabel(分数)
plt.title(学习时间与分数的关系)
plt.grid(True) # 显示网格
plt.show()2.1、线性图Line Plot
也称为折线图用折线连接数据点以展示数据随时间或其他连续变量的变化趋势。
import matplotlib.pyplot as plt
import numpy as np # 假设我们有一系列随时间变化的温度数据
days np.arange(1, 32) # 一个月的天数
temperatures np.random.uniform(low10, high30, size31) # 随机生成温度数据 plt.figure(figsize(10, 5))
plt.plot(days, temperatures, markero, linestyle-, colorred) # 绘制线性图
plt.xlabel(天数)
plt.ylabel(温度 (°C))
plt.title(一个月内的温度变化)
plt.grid(True)
plt.show()2.2、堆叠折线图
堆叠折线图通常用于展示随时间变化的累计数据其中每个系列表示一个分类堆叠在一起表示总的变化趋势
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 假设我们有关于不同产品产品A, 产品B, 产品C的销售数据这些数据随时间变化
dates pd.date_range(start2023-01-01, periods12, freqM) # 生成12个月的日期 # 假设数据如下
sales_data { 产品A: np.random.randint(10, 50, size12), 产品B: np.random.randint(5, 30, size12), 产品C: np.random.randint(20, 60, size12)
} # 计算累计销售数据
cumulative_sales {product: np.cumsum(sales) for product, sales in sales_data.items()} # 绘制堆叠折线图
fig, ax plt.subplots()
colors [b, g, r] # 为每个产品指定颜色
bottom np.zeros(len(dates)) # 初始化底部位置 for i, (product, sales) in enumerate(cumulative_sales.items()): ax.plot(dates, sales, colorcolors[i], labelproduct) bottom sales # 更新底部位置以进行堆叠 # 添加标题和标签
ax.set_xlabel(日期)
ax.set_ylabel(累计销售额)
ax.set_title(产品累计销售趋势)
ax.legend() # 显示图形
plt.tight_layout()
plt.xticks(rotation45) # 倾斜日期标签以便于阅读
plt.show()2.3、多图例折线图
观察多个图例的变化趋势可以用多图例折线图
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd # 假设我们有一些关于两个不同产品Product A 和 Product B的销售数据
# 创建日期范围
dates pd.date_range(start2023-01-01, periods12, freqM) # 创建一些模拟数据
np.random.seed(0) # 为了结果的可复现性
sales_a np.random.randint(50, 150, sizelen(dates))
sales_b np.random.randint(30, 120, sizelen(dates)) # 将数据放入 DataFrame 中
df pd.DataFrame({ 日期: dates, 产品A: sales_a, 产品B: sales_b
}) # 设置图形的尺寸
plt.figure(figsize(10, 6)) # 绘制折线图
plt.plot(df[日期], df[产品A], label产品A, markero, linestyle-)
plt.plot(df[日期], df[产品B], label产品B, markers, linestyle-) # 设置图表的标题和坐标轴标签
plt.title(销售情况)
plt.xlabel(日期)
plt.ylabel(销售额) # 设置图例位置
plt.legend(locupper left) # 设置网格
plt.grid(True) # 设置日期格式
plt.gcf().autofmt_xdate() # 显示图形
plt.show()3.1、柱状图/条形图Bar Chart
通过不同高度的长方形条形表示不同类别的数据大小常用于比较不同类别之间的数据。
import matplotlib.pyplot as plt # 假设我们有不同类别的产品销售额数据
categories [产品A, 产品B, 产品C, 产品D]
sales [1200, 1800, 1000, 1500] plt.figure(figsize(8, 6))
plt.bar(categories, sales, colorgreen, edgecolorblack) # 绘制柱状图
plt.xlabel(产品类别)
plt.ylabel(销售额)
plt.title(产品销售额比较)
plt.xticks(rotation45) # x轴标签倾斜
plt.grid(axisy, alpha0.75) # 仅y轴显示网格设置网格透明度
plt.show()3.2 堆叠条形图
堆叠条形图常用于展示不同分类下各个子分类的数值总和以及每个子分类对总和的贡献
import matplotlib.pyplot as plt
import numpy as np # 假设我们有关于不同部门A, B, C的支出数据这些支出又分为几个子类别工资、福利、其他
departments [部门A, 部门B, 部门C]
categories [工资, 福利, 其他] # 假设数据如下
data { 部门A: [20, 30, 10], 部门B: [25, 25, 15], 部门C: [15, 35, 20]
} # 转换数据为适合Matplotlib的格式
N len(departments)
ind np.arange(N) # 组的x位置
width 0.35 # 条形的宽度 # 初始化堆叠条形图的底部位置
bottom np.zeros(N) # 创建堆叠条形图
fig, ax plt.subplots()
for category in categories: values [data[dept][categories.index(category)] for dept in departments] ax.bar(ind, values, width, bottombottom, labelcategory) bottom values # 更新底部位置以进行堆叠 # 添加标题和标签
ax.set_xlabel(部门)
ax.set_ylabel(支出金额)
ax.set_title(各部门支出分布)
ax.set_xticks(ind)
ax.set_xticklabels(departments)
ax.legend() # 显示图形
plt.tight_layout()
plt.show()4、直方图Histogram
一种特殊的柱状图用于展示数据的分布情况每个柱子表示某一范围内的数据点数量。
import matplotlib.pyplot as plt
import numpy as np # 假设我们有一些正态分布的数据
data np.random.randn(1000) plt.figure(figsize(8, 6))
plt.hist(data, bins30, edgecolorblack, alpha0.7, colorlightblue) # 绘制直方图
plt.xlabel(数据值)
plt.ylabel(频数)
plt.title(数据分布直方图)
plt.grid(axisy, alpha0.75)
plt.show()5、饼图Pie Chart
用扇形的面积表示各部分在总体中所占的百分比常用于展示数据的比例关系。
import matplotlib.pyplot as plt # 假设我们有一组关于不同类别支出的数据
labels [食品, 住房, 交通, 娱乐, 其他]
sizes [25, 30, 15, 10, 20] # 各部分所占的百分比 plt.figure(figsize(8, 6))
plt.pie(sizes, labelslabels, autopct%1.1f%%, startangle140, colors[#ff9999,#66b3ff,#99ff99,#ffcc99,#c0c0c0]) # 绘制饼图
plt.axis(equal) # 保证饼图为圆形
plt.title(支出分布饼图)
plt.show()6、箱线图Box Plot
一种展示数据分布情况的图形通过中位数、四分位数等统计量来描绘数据的分布特征。
import matplotlib.pyplot as plt
import numpy as np # 假设我们有多组数据想要比较它们的分布
np.random.seed(10)
data1 np.random.normal(100, 10, 200)
data2 np.random.normal(90, 20, 200)
data3 np.random.normal(80, 30, 200)
data4 np.random.normal(70, 40, 200) labels [组1, 组2, 组3, 组4]
data [data1, data2, data3, data4] plt.figure(figsize(10, 7))
plt.boxplot(data, vertFalse, patch_artistTrue, notchTrue, medianprops{linewidth: 2}, showmeansTrue, meanlineTrue) # 绘制箱线图
plt.yticks(range(1, len(labels) 1), labels)
plt.xlabel(数据值)
plt.title(多组数据的箱线图)
plt.grid(axisx, alpha0.75)
plt.show()7、子图Subplot
在同一窗口中绘制多个图形便于比较和展示多组数据。
import matplotlib.pyplot as plt
import numpy as np # 创建一些模拟数据
x np.linspace(0, 10, 100)
y1 np.sin(x)
y2 np.cos(x) # 创建一个图形和一组子图
plt.figure(figsize(12, 6)) # 添加第一个子图
plt.subplot(2, 2, 1) # 2行2列第1个子图
plt.plot(x, y1)
plt.title(正弦函数)
plt.xlabel(x)
plt.ylabel(y) # 添加第二个子图
plt.subplot(2, 2, 2) # 2行2列第2个子图
plt.plot(x, y2)
plt.title(余弦函数)
plt.xlabel(x)
plt.ylabel(y) # 添加第三个子图共享x轴
plt.subplot(2, 1, 2) # 2行1列第2个子图跨两列
plt.plot(x, y1, labelsin(x))
plt.plot(x, y2, labelcos(x))
plt.title(正弦和余弦函数)
plt.xlabel(x)
plt.ylabel(y)
plt.legend() # 显示图形
plt.tight_layout() # 调整子图参数使之填充整个图像区域
plt.show()8、指标卡
import matplotlib.pyplot as plt
import numpy as np # 假设我们有一个百分比值
percentage 0.75 # 设置阈值
threshold 0.7 # 根据百分比值确定背景颜色
completed_color green if percentage threshold else red # 创建一个新的图形
fig, ax plt.subplots() # 绘制一个矩形表示进度条的背景
ax.add_patch(plt.Rectangle((0.1, 0.1), 0.8, 0.8, colorlightgrey)) # 绘制一个矩形表示已完成的进度
background_color white if completed_color green else blue # 确保已完成进度与背景色对比度高
ax.add_patch(plt.Rectangle((0.1, 0.1), 0.8 * percentage, 0.8, colorcompleted_color)) # 设置文本标签并调整字体大小
font_size 20 # 设置字体大小为20
ax.text(0.5, 0.5, f{percentage*100:.0f}%, hacenter, vacenter, fontsizefont_size, colorblack) # 移除坐标轴标签和刻度
ax.set_xticks([])
ax.set_yticks([])
ax.set_aspect(equal, adjustablebox) # 显示图形
plt.show()