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()

image

   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)

image

  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()

image

 

posted on 2025-11-25 11:39  花阴偷移  阅读(9)  评论(0)    收藏  举报

导航