1.用数据库或excel文件保存某公司的10种产品的每月销售数据,统计不同产品在2022和2023年的累计销售额,分别利用哑铃图和金字塔图进行展示
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
df = pd.read_excel("F:/DaiMa/MyJupyter/data/sale.xlsx")
newdf = df.set_index('产品')
#display(newdf)
data2022=newdf.iloc[:,0:12].sum(axis=1)
data2023=newdf.iloc[:,12:].sum(axis=1)
# display(data2022,data2023)
#设置画布
fig, ax = plt.subplots(1, 2, figsize=(15, 5))
ax1=ax[0]
ax1.set_xlabel("销售总额")
ax1.set_ylabel("产品名")
ax1.set_title("2022年与2023年某公司产品销售总额(哑铃图)")
#绘制散点图(哑铃图的两头)
ax1.scatter(y=data2022.index, x=data2022, color='orange')
ax1.scatter(y=data2023.index, x=data2023, color='yellow')
#绘制水平线(哑铃图的线头)
ax1.hlines(y=data2022.index, xmin=data2022, xmax=data2023, colors='skyblue', linewidth=2)
# y: 单个数值或一组数值,表示要绘制水平线的 y 坐标。
# xmin: 数值或数组,表示水平线段的起始 x 坐标。
# xmax: 数值或数组,表示水平线段的结束 x 坐标。
# colors: 线段的颜色,默认为黑色('k'),也可以是颜色名称或颜色代码。
# linestyles: 线段的线型,默认为实线('solid'),也可以是其他线型,如虚线('dashed')、点线('dotted')等。
# linewidth: 线段的宽度,默认为 1。
ax2=ax[1]
ax2.set_xlabel("销售总额")
ax2.set_ylabel("产品名")
ax2.set_title("2022年与2023年某公司产品销售总额(金字塔图)")
def fushu(x):
return -x;
ndata2022=data2022.apply(fushu)
# 绘制金字塔图
ax2.barh(y=data2022.index, width=ndata2022, label='2022年', color='#6699FF')
ax2.barh(y=data2023.index, width=data2023, label='2023年', color='#CC6699')
ax2.set_xticks([-6000, -4000, -2000,0, 2000, 4000, 6000])
ax2.set_xticklabels(['6000', '4000', '2000','0', '2000', '4000', '6000'])
ax2.legend(loc="best",bbox_to_anchor=(1,1))
plt.show()
运行结果:
2. 以时长2周10个工作日为例分析并制定本学期数据可视化实训计划,利用甘特图进行展示
import numpy as np
import matplotlib.pyplot as plt
ticks = np.array(['报告提交', '答辩', '报告撰写', '数据结果分析',
'数据录入', '代码撰写', '数据查找', '项目确定'])
y_data = np.arange(1, 9)
x_data = np.array([0.5, 0.5, 2.5, 0.5, 0.5, 4.5, 1, 1])
fig,ax = plt.subplots(1, 1)
ax.barh(y_data, x_data, tick_label=ticks, left=[9.5, 9, 6.5, 6.5, 6.5, 2, 1, 0], color='orange')
#[ax.spines[i].set_visible(False) for i in ['top', 'right']]
ax.set_xticks([0,1,2,3,4,5,6,7,8,9,10])
ax.set_title("数据可视化实训计划")
ax.set_xlabel("日期")
ax.grid(alpha=0.5, axis='x')
plt.show()
运行结果: