写点什么

Python 实践:基于 Matplotlib 实现某产品全年销量数据可视化

  • 2024-03-18
    广东
  • 本文字数:3515 字

    阅读完需:约 12 分钟

Python实践:基于Matplotlib实现某产品全年销量数据可视化

本文分享自华为云社区《画图实战-Python实现某产品全年销量数据多种样式可视化》,作者:虫无涯。

学习心得


  • 有时候我们需要对某些数据进行分析,得到一些可视化效果图,而这些效果图可以直观展示给我们数据的变化趋势;

  • 比如某产品的月销量数据、销售额的地区分布、销售增长和季节的变化情况、产品的贡献度分析等等;

  • 本文主要针对某产品全年销量数据,绘制各种不同样式的图表,以不同样式展示数据;

  • 学习本文建议对 Python 的 matplotlib 第三库有一定的了解。

Matplotlib 说明

什么是 Matplotlib?


  • Matplotlib 是一个 Python 的 2D 绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形;

  • Matplotlib 可生成绘图、直方图、功率谱、条形图、错误图、散点图、折线图等;

  • Matplotlib 是 Python 生态系统的一个重要组成部分,是用于可视化的绘图库;

  • Matplotlib 提供了一整套和 matlab 相似的命令 API 和可视化界面,可以生成出版质量级别的精美图形。

Matplotlib 特性


  • Matplotlib 图表中的元素包含以下内容:


A、X 轴和 Y 轴;B、X 轴和 Y 轴刻度;C、X 轴和 Y 轴标签;D、绘图区域。


  • 关于 hold 属性:


A、hold 属性默认为 True,可在一幅图中绘制多个曲线;B、将 hold 属性修改为 False,每一个 plot 都会覆盖前面的 plot(这种方法不推荐,建议使用默认的)。


  • 常用方法:


A、可使用 grid 方法为图添加网格线;B、还可以使用其他方法,如 axis 方法、xlim 方法、ylim 方法、legend 方法;


  • 关于配置方面:


matplotlib 配置信息是从配置文件读取的。在配置文件中可以为 matplotlib 的几乎所有属性指定永久有效的默认;主要为永久配置和动态配置。

Matplotlib 安装


直接使用 pip 安装即可:


pip install matplotlib

产品订单量-折线图

某产品全年订单量数据


  • 以下是某产品全年的销量数据:

  • 全年 12 个月数据中,每个月对应有产品的订单量和退货量。

数据提取和分析


  • 我们可以把月份用以下变量表示:


month = ["Jan", "Feb", "Mar", "Apr",          "May", "Jun", "Jul", "Aug",          "Sep", "Oct", "Nov", "Dec"]         print(f"月份为:{month}")# 输出:月份为:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
复制代码


复制运行


  • 产品对应的销量分两种,一种是订单量,一种是退货量,可用两个变量来存放数据:


# 订单量indent = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]
# 退货量returned = [6, 13, 18, 23, 55, 98, 42, 31, 25, 22, 17, 24]
print(f"每月订单量为:{indent}")print(f"每月退货量为:{returned}")
复制代码

绘制折线图


  • 折线图中我们绘制两条折线,一条是每月的退货量,一条是每月的订单量;

  • 而折线就是坐标组成,这里就需要多个两个坐标,比如 x1、y1、x2、y2;

  • 针对我们提供的数据,可以把坐标定义为:


x1 = month y1 = indentx2= month y2 = returned


  • 那对应的代码为:


import subprocessimport syssubprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])import matplotlib.pyplot as plt
month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]print(f"月份为:{month}")
# 订单量indent = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]
# 退货量returned = [6, 13, 18, 23, 55, 98, 42, 31, 25, 22, 17, 24]print(f"每月订单量为:{indent}")print(f"每月退货量为:{returned}")
# 绘制折线图plt.plot(month, indent, label='订单量', linewidth=2, color='r', marker='o', markerfacecolor='blue', markersize=8)
plt.plot(month, returned, label='退货量', linewidth=2, color='y', marker='o', markerfacecolor='blue', markersize=8)
plt.xlabel('月份')plt.ylabel('数量')plt.title('某产品全年订单销售情况')plt.rcParams['font.sans-serif'] = ['SimHei']plt.legend()# plt.show()plt.savefig("plot.jpg")
复制代码


  • 运行上边代码后折线图的效果为:


产品订单 &销售额-条形图

某产品全年订单 &销售额数据


  • 以下是某产品全年的销量数据:

  • 图中的意思为对应的订单量的销售额和对应的退货量的价格。

绘制条形图


  • 条形图中我们绘制双条形,一条是每月的退货量及对应价格,一条是每月的订单量和销售额;

  • 针对我们提供的数据,可以把坐标定义为:


x1 = indent y1 = m1x2= returned y2 = m2


  • 那对应的代码为:


import subprocessimport syssubprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])import matplotlib.pyplot as plt
# 订单量indent = [10, 30, 50, 70, 90, 110, 130, 150]# 销售额m1 = [5, 7, 9, 11, 13, 15, 17, 19]
# 退货量returned = [20, 40, 60, 80, 100, 120, 140, 160]# 价格m2 = [3, 5, 7, 9, 11, 13, 15, 17]
# 绘制折线图plt.bar(indent, m1, width=3, label='订单量-销售额', color='r', )plt.bar(returned, m2, width=3, label='退货量-价格', color='y')
plt.xlabel('数量')plt.ylabel('价格')plt.title('某产品全年订单&销售额情况')plt.rcParams['font.sans-serif'] = ['SimHei']plt.legend()# plt.show()plt.savefig("plot.jpg")
复制代码


  • 运行以上代码后效果图为:



注意:后续的数据和操作逻辑和前边的一样,为了快速了解其使用,不再描述详细的数据,仅用示例说明。

某产品 xx-直方图


  • 那对应的代码为:


import subprocessimport syssubprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])import matplotlib.pyplot as plt
data = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]x = range(0, 100, 2)
# 绘制直方图plt.hist(data, x, rwidth=3, label='直方图', color='y')
plt.xlabel('X')plt.ylabel('Y')plt.title('直方图')plt.rcParams['font.sans-serif'] = ['SimHei']plt.legend()# plt.show()plt.savefig("plot.jpg")
复制代码


  • 运行代码后效果如下:


某产品 xx-散点图


  • 那对应的代码为:


import subprocessimport syssubprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])import matplotlib.pyplot as plt
data = [15, 33, 42, 50, 115, 20, 86, 66, 59, 43, 39, 50]x = range(0, len(data))
# 绘制散点图plt.scatter(x, data, label='散点图', s=15)
plt.xlabel('X')plt.ylabel('Y')plt.title('散点图')plt.rcParams['font.sans-serif'] = ['SimHei']plt.legend()# plt.show()plt.savefig("plot.jpg")
复制代码


  • 运行代码后效果为:


某产品 xx-饼图


  • 对应代码为:


import subprocessimport syssubprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])subprocess.check_call([sys.executable, "-m", "pip", "install", "numpy"])import matplotlib.pyplot as pltimport numpy as np
data = np.array([10, 20, 15, 15, 5, 5, 30])
plt.pie(data, labels=['P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7'], colors=["#8B008B", "#FF1493", "#4B0082", "#B0C4DE", "#E1FFFF", "#008080", "#00FF7F"], explode=(0, 0, 0.3, 0, 0, 0.2, 0), autopct='%.2f%%', )plt.title('饼图')plt.rcParams['font.sans-serif'] = ['SimHei']# plt.show()plt.savefig("plot.jpg")
复制代码


  • 运行代码效果为:

某产品 xx-多图效果


  • 对应代码为:


import subprocessimport syssubprocess.check_call([sys.executable, "-m", "pip", "install", "matplotlib"])subprocess.check_call([sys.executable, "-m", "pip", "install", "numpy"])import matplotlib.pyplot as pltimport numpy as np
x = np.array([10, 50])y = np.array([10, 80])plt.subplot(2, 2, 1)plt.plot(x, y)plt.title("图1")
x = np.array([10, 20, 30, 40])y = np.array([10, 30, 50, 110])plt.subplot(2, 2, 2)plt.plot(x, y)plt.title("图2")x = np.array([10, 20, 30, 40])y = np.array([50, 60, 70, 80])plt.subplot(2, 2, 3)plt.plot(x, y)plt.title("图3")x = np.array([20, 25, 30, 35])y = np.array([40, 45, 50, 55])plt.subplot(2, 2, 4)plt.plot(x, y)plt.title("图4")
plt.suptitle("多图显示")plt.rcParams['font.sans-serif'] = ['SimHei']#plt.show()plt.savefig("plot.jpg")
复制代码


  • 运行代码后的效果为:

总结


Python 实现某产品全年销量数据多种样式可视化,主要是应用了 python 的 matplotlib 库进行绘制各种图表,除了以上的几种图表,还有柱状图、网格图等等。学习的时候建议使用真实的数据,可以真正达到分析问题的效果。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
Python实践:基于Matplotlib实现某产品全年销量数据可视化_Python_华为云开发者联盟_InfoQ写作社区