卖不甜枣 发表于 2024-5-14 14:27:23

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 =

# 退货量
returned =

print(f"每月订单量为:{indent}")
print(f"每月退货量为:{returned}")绘制折线图


[*]折线图中我们绘制两条折线,一条是每月的退货量,一条是每月的订单量;
[*]而折线就是坐标组成,这里就需要多个两个坐标,比如x1、y1、x2、y2;
[*]针对我们提供的数据,可以把坐标界说为:
x1 = month y1 = indentx2= month y2 = returned


[*]那对应的代码为:
import subprocessimport syssubprocess.check_call()import matplotlib.pyplot as pltmonth = ["Jan", "Feb", "Mar", "Apr",         "May", "Jun", "Jul", "Aug",         "Sep", "Oct", "Nov", "Dec"]print(f"月份为:{month}")# 订单量
indent =

# 退货量
returned =

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

[*]运行上边代码后折线图的结果为:
 
https://static001.geekbang.org/infoq/b6/b6e31e5ec64a2df1259dd89e9c5852fc.png
 
产品订单&销售额-条形图

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


[*]以下是某产品全年的销量数据:


[*]图中的意思为对应的订单量的销售额和对应的退货量的价格。
绘制条形图


[*]条形图中我们绘制双条形,一条是每月的退货量及对应价格,一条是每月的订单量和销售额;
[*]针对我们提供的数据,可以把坐标界说为:
x1 = indent y1 = m1x2= returned y2 = m2


[*]那对应的代码为:
import subprocess
import sys
subprocess.check_call()
import matplotlib.pyplot as plt

# 订单量
indent =
# 销售额
m1 =

# 退货量
returned =
# 价格
m2 =

# 绘制折线图
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")

[*]运行以上代码后结果图为:
 
https://static001.geekbang.org/infoq/83/83a6a1b59e4260be53b811627ef5defd.png
 
留意:后续的数据和操纵逻辑和前边的一样,为了快速了解其使用,不再描述具体的数据,仅用示例说明。
某产品xx-直方图


[*]那对应的代码为:
import subprocess
import sys
subprocess.check_call()
import matplotlib.pyplot as plt

data =
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")

[*]运行代码后结果如下:
 
https://static001.geekbang.org/infoq/5a/5a35df51e4b32f20500c187d4c3b9e55.png
某产品xx-散点图


[*]那对应的代码为:
import subprocess
import sys
subprocess.check_call()
import matplotlib.pyplot as plt

data =
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")

[*]运行代码后结果为:
 
https://static001.geekbang.org/infoq/e6/e6d428238df22efdb3b01922d9f33f7b.png
 
某产品xx-饼图


[*]对应代码为:
import subprocess
import sys
subprocess.check_call()
subprocess.check_call()
import matplotlib.pyplot as plt
import numpy as np

data = np.array()

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

[*]运行代码结果为:

 
https://static001.geekbang.org/infoq/9f/9f7a6899536b8d468e7f30fdb0cfa12e.png
 
某产品xx-多图结果


[*]对应代码为:
import subprocess
import sys
subprocess.check_call()
subprocess.check_call()
import matplotlib.pyplot as plt
import numpy as np

x = np.array()
y = np.array()
plt.subplot(2, 2, 1)
plt.plot(x, y)
plt.title("图1")

x = np.array()
y = np.array()
plt.subplot(2, 2, 2)
plt.plot(x, y)
plt.title("图2")
x = np.array()
y = np.array()
plt.subplot(2, 2, 3)
plt.plot(x, y)
plt.title("图3")
x = np.array()
y = np.array()
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")

[*]运行代码后的结果为:

 
https://static001.geekbang.org/infoq/77/778263889688361a8bae2cee22b64988.png
 
总结

Python实现某产品全年销量数据多种样式可视化,重要是应用了python的matplotlib库进行绘制各种图表,除了以上的几种图表,还有柱状图、网格图等等。学习的时候建议使用真实的数据,可以真正达到分析问题的结果。
 
点击关注,第一时间了解华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Python实践:基于Matplotlib实现某产品全年销量数据可视化