一周学会Pandas2之Python数据处理与分析-Pandas2数据绘图与可视化

article/2025/6/8 0:43:54

锋哥原创的Pandas2 Python数据处理与分析 视频教程:  

2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

Pandas 集成了 Matplotlib,提供了简单高效的绘图接口,使数据可视化变得直观便捷。本指南将详细介绍 Pandas 绘图的核心知识和方法,涵盖各种图表类型和高级技巧。

一、绘图基础与设置

1.1 基础绘图方法

Pandas 的 plot() 方法是绘图的核心入口点:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
np.random.seed(42)
df = pd.DataFrame({'A': np.random.randn(100).cumsum(),'B': np.random.randn(100).cumsum(),'C': np.random.randn(100).cumsum()
}, index=pd.date_range('2023-01-01', periods=100))
​
# 基本绘图
df.plot(figsize=(10, 6))
plt.title('基本折线图')
plt.ylabel('数值')
plt.xlabel('日期')
plt.grid(True)
plt.show()

1.2 绘图参数详解

常用绘图参数:

df.plot(kind='line',        # 图表类型figsize=(12, 8),    # 图表尺寸title='图表标题',     # 标题grid=True,          # 显示网格legend=True,        # 显示图例colormap='viridis', # 颜色映射alpha=0.8,          # 透明度style=['-', '--', ':'],  # 线条样式logy=True,          # Y轴对数刻度secondary_y=['B']   # 双Y轴
)

二、图表类型详解

2.1 折线图 (Line Plot)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
np.random.seed(42)
df = pd.DataFrame({'A': np.random.randn(100).cumsum(),'B': np.random.randn(100).cumsum(),'C': np.random.randn(100).cumsum()
}, index=pd.date_range('2023-01-01', periods=100))
​
# 基础折线图
df.plot(kind='line', figsize=(10, 6))
​
# 多线图定制
ax = df.plot(style={'A': 'g--',  # 绿色虚线'B': 'ro-',  # 红色圆点实线'C': 'b:'  # 蓝色点线},linewidth=2,title='定制折线图'
)
ax.set_ylabel('数值')
ax.set_xlabel('日期')
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()

2.2 柱状图 (Bar Plot)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
bar_data = pd.DataFrame({'类别': ['苹果', '香蕉', '橙子', '葡萄', '西瓜'],'销量': [120, 85, 110, 65, 95],'价格': [8.5, 6.0, 7.2, 12.8, 4.5]
})
​
# 垂直柱状图
bar_data.plot(kind='bar', x='类别', y='销量',color='skyblue', figsize=(10, 6),title='水果销量柱状图')
plt.ylabel('销量')
plt.show()
​
# 水平柱状图
bar_data.plot(kind='barh', x='类别', y='价格',color='salmon', figsize=(10, 6),title='水果价格水平柱状图')
plt.xlabel('价格(元/公斤)')
plt.show()

2.3 堆叠柱状图 (Stacked Bar Plot)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
sales_data = pd.DataFrame({'季度': ['Q1', 'Q2', 'Q3', 'Q4'],'线上': [120, 150, 180, 200],'线下': [80, 95, 110, 125],'批发': [200, 220, 250, 280]
})
​
# 堆叠柱状图
ax = sales_data.plot(kind='bar',stacked=True,x='季度',figsize=(10, 6),title='季度销售渠道分布',colormap='Set2'
)
​
# 添加数据标签
for p in ax.patches:width, height = p.get_width(), p.get_height()x, y = p.get_xy()if height > 0:ax.annotate(f'{height:.0f}', (x + width / 2, y + height / 2),ha='center', va='center')
​
plt.ylabel('销售额(万元)')
plt.show()

2.4 直方图 (Histogram)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
np.random.seed(42)
normal_data = pd.Series(np.random.normal(0, 1, 1000))
exp_data = pd.Series(np.random.exponential(1, 1000))
​
# 直方图
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
​
normal_data.plot(kind='hist', bins=30, ax=axes[0],color='skyblue', edgecolor='black',title='正态分布直方图')
axes[0].set_xlabel('值')
​
exp_data.plot(kind='hist', bins=30, ax=axes[1],color='salmon', edgecolor='black',title='指数分布直方图')
axes[1].set_xlabel('值')
​
plt.tight_layout()
plt.show()

2.5 密度图 (Density Plot)

需要新安装scipy库

pip install scipy   -i https://mirrors.aliyun.com/pypi/simple
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
np.random.seed(42)
normal_data = pd.Series(np.random.normal(0, 1, 1000))
exp_data = pd.Series(np.random.exponential(1, 1000))
​
# 密度图
fig, ax = plt.subplots(figsize=(10, 6))
​
normal_data.plot(kind='kde', ax=ax, label='正态分布')
exp_data.plot(kind='kde', ax=ax, label='指数分布')
​
ax.set_title('分布密度比较')
ax.set_xlabel('值')
ax.legend()
ax.grid(True, linestyle='--', alpha=0.7)
plt.show()

2.6 箱线图 (Box Plot)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
np.random.seed(42)
box_data = pd.DataFrame({'A': np.random.normal(0, 1, 100),'B': np.random.normal(2, 1.5, 100),'C': np.random.normal(-1, 0.8, 100),'D': np.random.exponential(1, 100)
})
​
# 箱线图
ax = box_data.plot(kind='box', figsize=(10, 6),title='多变量箱线图比较',vert=False,  # 水平箱线图patch_artist=True,  # 填充颜色boxprops=dict(facecolor='lightblue'),medianprops=dict(color='red', linewidth=2),whiskerprops=dict(color='black'),capprops=dict(color='black'),flierprops=dict(marker='o', markersize=5, markerfacecolor='gray'))
ax.set_xlabel('值')
plt.grid(True, axis='x', linestyle='--', alpha=0.7)
plt.show()

2.7 散点图 (Scatter Plot)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
np.random.seed(42)
data = {'销售额': np.random.normal(50000, 15000, 100),'广告投入': np.random.normal(10000, 3000, 100),'客户满意度': np.random.randint(1, 10, 100),'产品类别': np.random.choice(['A', 'B', 'C'], 100)
}
df = pd.DataFrame(data)
​
# 基础散点图
df.plot.scatter(x='广告投入', y='销售额',title='广告投入 vs 销售额',figsize=(10, 6),grid=True)
plt.tight_layout()
plt.savefig('basic_scatter.png', dpi=120)
plt.show()

2.8 饼图 (Pie Chart)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建示例数据
pie_data = pd.Series({'亚洲': 45,'欧洲': 25,'北美': 15,'南美': 8,'非洲': 5,'大洋洲': 2
}, name='市场份额')
​
# 饼图
ax = pie_data.plot(kind='pie', figsize=(10, 8), autopct='%1.1f%%',startangle=90, shadow=True, explode=[0.1, 0, 0, 0, 0, 0],colors=['#ff9999', '#66b3ff', '#99ff99', '#ffcc99', '#c2c2f0', '#ffb3e6'],title='全球市场份额分布')
​
ax.set_ylabel('')  # 隐藏Y轴标签
plt.axis('equal')  # 保证饼图是圆形
plt.show()

三、时间序列可视化

基础时间序列图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
​
from pylab import mpl
​
# 引入支持中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
​
# 创建时间序列数据
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=365)
ts_data = pd.DataFrame({'销量': 100 + np.sin(np.linspace(0, 10 * np.pi, 365)) * 50 +np.random.normal(0, 10, 365),'温度': 15 + 20 * np.sin(np.linspace(0, 2 * np.pi, 365)) +np.random.normal(0, 3, 365)
}, index=dates)
​
# 时间序列图
ax = ts_data['销量'].plot(figsize=(12, 6), color='blue', label='销量')
ax.set_ylabel('销量')
​
# 双Y轴
ax2 = ax.twinx()
ts_data['温度'].plot(ax=ax2, color='red', linestyle='--', label='温度')
ax2.set_ylabel('温度(℃)')
​
# 添加标题和图例
plt.title('销量与温度变化趋势')
lines, labels = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax.legend(lines + lines2, labels + labels2, loc='upper left')
​
# 添加网格
ax.grid(True, linestyle='--', alpha=0.7)
plt.show()


http://www.hkcw.cn/article/tlAotopQtm.shtml

相关文章

Go语言快速入门(基础语法与面向对象OOP)

文章目录 阅读前置条件golang环境安装golang特点第一个Go程序Go语言变量声明常量Golang多返回值的三种写法go函数import匿名与别名导包方式指针defer关键字结束(defer会在结束时调用,类似Java的finally)slice切片数组与动态数组的定义动态数组与切片的四种声明方式s…

用AI(Deepseek)做了配色网站-功能介绍【欢迎体验】

前言 前面分享了一篇文章:关于用AI做了一个配色网站,并讲了如何“结合AI开发想法”实现作品。 以下是文章链接: 一天时间,我用AI(DeepSeek)做了一个配色网站 当时为第一版本,网站的很多功能和细节还有很多完善的地方…

【2025年B卷】OD-100分-斗地主之顺子

专栏订阅🔗 -> 赠送OJ在线评测 斗地主之顺子 问题描述 卢小姐喜欢玩斗地主扑克牌游戏。在这个游戏中,扑克牌由小到大的顺序为:3、4、5、6、7、8、9、10、J、Q、K、A、2。玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等多种组合。 顺子是一种常见的出牌方…

题山采玉: Day1

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…

优化 Transformer 模型:基于知识蒸馏、量化技术及 ONNX

Transformer 模型非常强大,但往往太大太慢,不适合实时应用。为了解决这个问题,我们来看看三种关键的优化技术:知识蒸馏、量化和ONNX 图优化。这些技术可以显著减少推理时间和内存使用。 为了说明每种技术的利弊,我们以…

C++实现图形化2048小游戏

目录 一、游戏规则二、步骤实现(一) SDL库的安装(二) 初始化游戏界面1. 后台数字模型2 显示模型2.1 SDL库的使用2.1.1 窗口渲染2.1.2 矩形绘制 2.2 SDL-ttf库的使用2.2.1 设置字体属性2.2.2 创建纹理图层2.2.3 绘制文字 (三) 随机生成2个数字(2或4)(四) …

Halcon光度立体法

1、光度立体法,可用于将对象的三维形状与其二维纹理(例如打印图像)分离。需要用不同方向而且已知照明方向的多个光源,拍摄同一物体的至少三张图像。请注意,所有图像的相机视角必须相同。 物体的三维形状主要被计算为三…

北方局地40℃又来了 干热烤验来临

天气即将变热,南北方的高温特点各不相同。北方是干热型高温,南方则是闷热型高温。全国大部分地区降水稀少,仅局部有雨。从今天夜间到后两天,降水预报图上将出现大片无降水区域,雨水不再是天气舞台的主要角色。气温成为焦点,南北方30℃以上的高温将连成一片,部分地区还将…

【后端架构师的发展路线】

后端架构师的发展路线是从基础开发到技术领导的系统性进阶过程,需融合技术深度、架构思维和业务洞察力。以下是基于行业实践的职业发展路径和关键能力模型: 一、职业发展阶梯‌ 初级工程师(1-3年)‌ 核心能力‌:掌…

Python爬虫监控程序设计思路

最近因为爬虫程序太多,想要为Python爬虫设计一个监控程序,主要功能包括一下几种: 1、监控爬虫的运行状态(是否在运行、运行时间等) 2、监控爬虫的性能(如请求频率、响应时间、错误率等) 3、资…

[手写系列]从0到1开发并上线Edge浏览器插件

[手写系列]从0到1开发并上线Edge浏览器插件 一、实战开发 我们将从0到1创建一个实用的"页面分析助手"插件,它可以显示当前页面的字数统计、阅读时间和主要关键词。 官方插件文档链接:https://learn.microsoft.com/zh-cn/microsoft-edge/exten…

归一化还是标准化?如何为你的数据选择最佳缩放方法

为什么你的模型需要"身高均等"? 想象一下,如果你在篮球队里同时安排了姚明(2.29米)和"小土豆"姜山(1.65米)一起打球,结果会怎样?显然,姚明会"…

JS逆向-基础入门案例(详细步骤)

一、基础入门案例AES(详细步骤) https://36kr.com/p/952011547555464 点击搜索 输入 decrypt( 看看是否有AES.decrypt( 点进去之后,打断点,打完断点之后,进行刷新 复制内容,可以在控制台输入 可以看到能获取到明文数据 创建…

项目目标和期望未被清晰传达,如何改进?

在项目管理实践中,目标模糊、期望不明、沟通渠道混乱是导致项目偏离方向、资源浪费和团队士气低落的核心原因。根据PMI《项目管理知识体系指南》(PMBOK),超过39%的项目失败源于沟通不畅。要有效解决这一问题,必须优化沟…

推荐一款PDF压缩的工具

今天一位小伙伴找来,问我有没有办法将PDF变小的办法。 详细了解了一下使用场景: 小伙伴要在某系统上传一个PDF文件,原文件是11.6MB,但是上传时系统做了限制,只能上传小于10MB的文件,如图: 我听…

以太网帧结构和封装【三】-- TCP/UDP头部信息

TCP头部用于建立可靠连接、流量控制及数据完整性校验。 Ipv4封装tcp报: Ipv6封装tcp报: UDP头部信息 UDP关键协议特性: 1)无连接:无需握手,直接发送数据。 2)不可靠性:不保证数据…

61、ESB详解

ESB(Enterprise Service Bus,企业服务总线)是一种用于集成企业内不同应用程序和系统的中间件架构,它在企业信息化建设中扮演着关键角色,以下从核心概念、架构组成、功能特性、应用场景、优势与挑战几个方面进行详解&am…

六步完成软件验收:从计划到终验的全面指南(二)

在软件开发项目中,验收环节是确保软件质量、满足客户需求并成功交付的关键步骤。本文将为您详细介绍如何通过六个步骤,从计划到终验,全面完成软件验收工作。 四、执行验收测试并记录结果 按照验收测试计划,执行相应的测试用例&am…

fdisk给磁盘扩容实录

fdisk给磁盘扩容实录 步骤 1:对 /dev/sdb 进行分区步骤 2:创建物理卷(PV)步骤 3:将物理卷添加到卷组(VG)步骤 4:扩展逻辑卷(LV)步骤 5:调整文件系统大小步骤 1:对 /dev/sdb 进行分区 使用 fdisk 工具对 /dev/sdb 进行分区,创建一个新分区。 fdisk /dev/sdb 在 fd…

AbMole| Dimethyl sulfoxide(DMSO, 二甲基亚砜)

Dimethyl sulfoxide(DMSO,二甲基亚砜)是一种常用的有机溶剂,溶解能力强,能溶于水、乙醇、丙醇、乙醚、苯和氯仿等大多数有机物,可用于化合物等产品的溶解。 一、化学性质/溶解性/储存 分子量78.13分子式C2…