Matplotlib数据可视化--拆线图
一.介绍
Matplotlib 是 Python 编程语言及其数值计算库 NumPy 的一个2D 绘图库。它被公认为 Python 生态系统中最著名、使用最广泛的可视化工具包。
核心特点:
功能强大:从简单的折线图到复杂的3D图形、动画,几乎无所不能。
高度可控:可以对图表的每一个元素(刻度、标签、线条、颜色等)进行精细调整。
兼容性强:支持多种输出格式(如 PNG, PDF, SVG, EPS)和交互式环境(如 Jupyter Notebook)。
生态成熟:是 Python 数据科学栈(PyData Stack)的基石之一,与 NumPy, Pandas, Scikit-learn 等库无缝集成。
核心概念与架构
理解 Matplotlib 的架构是熟练使用它的关键。其设计思想来源于 MATLAB,因此有两个主要的编程接口。
1)pyplot 接口(MATLAB 风格)- 适用于快速绘图
这是一个状态机接口,非常简洁,适合快速生成图表。它隐藏了底层复杂的对象结构。
2)面向对象接口(OO 风格)- 适用于复杂图形和精细控制
这是更推荐的方式,尤其当你的图形中包含多个子图时。它显式地创建图形(Figure)和坐标轴(Axes)对象,然后在这些对象上调用方法。
安装包命令
conda install matplotlib
二.演示
2. 1 导入的包
import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates #解决中文字符的显示问题 plt.rcParams['font.sans-serif']="SimHei" #解决负号的显示问题 plt.rcParams['axes.unicode_minus']=False
2.2 成交量拆线图
通过pd获取一个stock.xlsx的文件,读取时间列为X轴,成交量为Y轴,默认显示前5天的成交量。
df=pd.read_excel("doc/stock.xlsx",sheet_name="Sheet1") df.head() #绘制拆线图 --plt.plot() #把时间作为x轴,把成交量作为y轴 x = pd.to_datetime(df["时间"]).dt.strftime('%Y-%m-%d') y=df["成交量"] plt.plot(x,y) plt.show()

2.3 成交量拆线图丰富显示
df=pd.read_excel("doc/stock.xlsx",sheet_name="Sheet1") df.head(10) #绘制拆线图 --plt.plot() #把时间作为x轴,把成交量作为y轴 x = pd.to_datetime(df["时间"]).dt.strftime('%Y-%m-%d') y=df["成交量"] plt.plot(x,y,label="成交量", marker="o") #拆线图标题 plt.title("公司成交量分析") #x轴和y轴说明 plt.xlabel("销售时间") plt.ylabel("销售数量") #y轴从50开始到最大500,间隔50 plt.yticks(range(50,500,50)) #给x轴的值显示出来 for a,b in zip(x,y): plt.text(a,b,b,ha="center", va="center") #添加网格 plt.grid() #图形中显示成交量 plt.legend() plt.tight_layout() # 自动调整布局 plt.show() #保存成图片 #plt.savefig("doc/plot.png",dpi=1200)

2.4 双拆线图显示
df=pd.read_excel("doc/stock.xlsx",sheet_name=1) df.head(5) #绘制拆线图 --plt.plot() #把时间作为x轴,把成交量作为y轴 x = pd.to_datetime(df["时间"]).dt.strftime('%Y-%m-%d') y1=df["计划成交量"] y2=df["实际成交量"] plt.plot(x,y1,label="计划成交量", marker="o",alpha=0.5) plt.plot(x,y2,label="实际成交量", marker="d",alpha=0.5) #拆线图标题 plt.title("公司成交量分析") #x轴和y轴说明 plt.xlabel("销售时间") plt.ylabel("销售数量") #y轴从50开始到最大500,间隔50 plt.yticks(range(50,500,50)) #给x轴的值显示出来 for a,b in zip(x,y1): plt.text(a,b,b,ha="center", va="center") for a,b in zip(x,y2): plt.text(a,b,b,ha="center", va="center") #添加网格 plt.grid() #图形中显示成交量 plt.legend() plt.tight_layout() # 自动调整布局 plt.show()

浙公网安备 33010602011771号