如何制作占比图(如何制作占比报表)

最近有很多朋友都想知道关于如何制作占比图的答案。还有朋友想了解如何制作占比报表。对此,碳百科准备了相关的攻略,希望能给你带来帮助。

# 案例01 制作柱形图展示数据的对比关系
import xlwings as xw  # 导入xlwings模块
app = xw.App(visible = True, add_book = False)  # 启动Excel程序
workbook = app.books.open('E:\\Python案例操作2\\员工销售业绩统计表.xlsx')  # 打开要制作图表的工作簿
for i in workbook.sheets:  # 遍历工作簿中的工作表
    chart = i.charts.add(left = 200, top = 0, width = 355, height = 211)  # 设置图表的位置和尺寸
    chart.set_source_data(i['A1'].expand())  # 读取工作表中要制作图表的数据
    chart.chart_type = 'column_clustered'  # 制作柱形图
workbook.se('E:\\Python案例操作2\\柱形图.xlsx')  # 另存工作簿
workbook.close()  # 关闭工作簿
app.quit()  # 退出Excel程序

In [2]:

# 案例01-1 制作条形图展示数据的对比关系
import xlwings as xw
app = xw.App(visible = True, add_book = False)
workbook = app.books.open('E:\\Python案例操作2\\员工销售业绩统计表.xlsx')
for i in workbook.sheets:
    chart = i.charts.add(left = 200, top = 0, width = 355, height = 211)
    chart.set_source_data(i['A1'].expand('table'))
    chart.chart_type = 'bar_clustered'  #制作条形图
workbook.se('E:\\Python案例操作2\\条形图.xlsx')
workbook.close()
app.quit()

In [16]:

# 案例02 制作折线图展示数据变化趋势
import pandas as pd  # 导入pandas模块
import matplotlib.pyplot as plt  # 导入Matplotlib模块
import xlwings as xw  # 导入xlwings模块
df = pd.read_excel('E:\\Python案例操作2\\月销售表.xlsx')  # 从指定工作簿中读取数据
figure = plt.figure()  # 创建一个绘图窗口
plt.rcParams['font.sans-serif']=['SimHei']  # 为图表中的中文文本设置默认字体,以避免中文显示乱码的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标值为负数时无法正常显示负号的问题
x = df['月份']  # 指定数据中的“月份”列为x坐标的值
y = df['销售额']  # 指定数据中的“销售额”列为y坐标的值
plt.plot(x, y, color = 'red', linewidth = 3, linestyle = 'solid')  # 制作折线图
plt.title(label = '月销售额趋势图', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')  # 添加并设置图表标题
for a,b in zip(x,y):  # 遍历折线图的每一个数据点
    plt.text(a, b + 0.2, (a, '%.0f' % b), ha = 'center', va = 'bottom', fontsize = 10)  # 添加并设置数据标签
    plt.axis('off')  # 隐藏坐标轴
app = xw.App(visible = False)  # 启动Excel程序
workbook = app.books.open('E:\\Python案例操作2\\月销售表.xlsx')  # 打开要插入图表的工作簿
worksheet = workbook.sheets['Sheet1']  # 选中工作表“Sheet1”
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)  # 在工作表中插入制作的折线图
workbook.se('E:\\Python案例操作2\\折线图.xlsx')  # 另存工作簿
workbook.close()  # 关闭工作簿
app.quit()  # 退出Excel程序

In [17]:

# 案例02-1  制作折线图并为最高点添加数据标签
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('E:\\Python案例操作2\\月销售表.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['月份']
y = df['销售额']
plt.plot(x, y, color = 'red', linewidth = '3', linestyle = 'solid')
plt.title(label = '月销售额趋势图',fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')
max1 = df['销售额'].max()
df_max = df[df['销售额'] == max1]
for a,b in zip(df_max['月份'], df_max['销售额']):
    plt.text(a, b + 0.05, (a, '%.0f' % b), ha = 'center', va = 'bottom', fontsize = 10)
plt.axis('off')
app = xw.App(visible = False)
workbook = app.books.open('E:\\Python案例操作2\\月销售表.xlsx')
worksheet = workbook.sheets['Sheet1']
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)
workbook.se('E:\\Python案例操作2\\显示最高点数据标签的折线图.xlsx')
workbook.close()
app.quit()

In [18]:

# 案例02-2 制作平滑折线图
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
import xlwings as xw
df = pd.read_excel('E:\\Python案例操作2\\月销售表.xlsx')
figure = plt.figure()  
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['月份']
y = df['销售额']
xnew = np.arange(1, 12, 0.1) #设置等差数组
func = interpolate.interp1d(x, y, kind = 'cubic')
ynew = func(xnew)
plt.plot(xnew, ynew, color = 'red', linewidth = '3', linestyle = 'solid')
plt.title(label = '月销售额趋势图',fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')
plt.xlabel('月份', fontdict = {'family' : 'SimSun', 'color' : 'black', 'size' : 20}, labelpad = 20)  
plt.ylabel('销售额', fontdict = {'family' : 'SimSun', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.xlim(0, 12) #设置图表x轴的取值范围
app = xw.App(visible = False)
workbook = app.books.open('E:\\Python案例操作2\\月销售表.xlsx')
worksheet = workbook.sheets['Sheet1']
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)
workbook.se('E:\\Python案例操作2\\平滑折线图.xlsx')
workbook.close()
app.quit()

In [2]:

# 案例03 制作散点图判断两组数据的相关
import pandas as pd  # 导入pandas模块
import matplotlib.pyplot as plt  # 导入Matplotlib模块
import xlwings as xw  # 导入xlwings模块
df = pd.read_excel('E:\\Python案例操作2\\汽车速度和刹车距离表.xlsx')  # 从指定工作簿中读取数据
figure = plt.figure()  # 创建一个绘图窗口
plt.rcParams['font.sans-serif'] = ['SimHei']  # 为图表中的中文文本设置默认字体,以避免中文显示乱码的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标值为负数时无法正常显示负号的问题
x = df['汽车速度(km/h)']  # 指定数据中的“汽车速度(km/h)”列为x坐标的值
y = df['刹车距离(m)']  # 指定数据中的“刹车距离(m)”列为y坐标的值
plt.scatter(x, y, s = 400, color = 'red', marker = 'o', edgecolor = 'black')  # 制作散点图
plt.xlabel('汽车速度(km/h)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)  # 添加并设置x轴标题
plt.ylabel('刹车距离(m)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)  # 添加并设置y轴标题
plt.title('汽车速度与刹车距离关系图', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 30}, loc = 'center')  # 添加并设置图表标题
app = xw.App(visible = False)  # 启动Excel程序
workbook = app.books.open('E:\\Python案例操作2\\汽车速度和刹车距离表.xlsx')  # 打开要插入图表的工作簿
worksheet = workbook.sheets[0]  # 选中第1个工作表
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)  # 在工作表中插入制作的散点图
workbook.se('E:\\Python案例操作2\\散点图.xlsx')  # 另存工作簿
workbook.close()  # 关闭工作簿
app.quit()  # 退出Excel程序

In [3]:

# 案例03-1 为散点图添加线趋势线
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
from sklearn import linear_model
df = pd.read_excel('E:\\Python案例操作2\\汽车速度和刹车距离表.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['汽车速度(km/h)']
y = df['刹车距离(m)']
plt.scatter(x, y, s = 400, color = 'red', marker = 'o', edgecolor = 'black')
plt.xlabel('汽车速度(km/h)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.ylabel('刹车距离(m)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.title('汽车速度与刹车距离关系图', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 30}, loc = 'center')
model = linear_model.LinearRegression().fit(x.values.reshape(-1,1), y)
pred = model.predict(x.values.reshape(-1,1))
plt.plot(x, pred,  color = 'black', linewidth = '3', linestyle = 'solid', label = '线趋势线')
plt.legend(loc = 'upper left')
app = xw.App(visible = False)
workbook = app.books.open('E:\\Python案例操作2\\汽车速度和刹车距离表.xlsx')
worksheet = workbook.sheets[0]
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)
workbook.se('E:\\Python案例操作2\\为散点图添加线趋势线.xlsx')
workbook.close()
app.quit()

In [10]:

# 案例03-2 制作气泡图
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('E:\\Python案例操作2\\气泡图.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['销售量']
y = df['利润(万)']
z = df['产品名称']
plt.scatter(x, y, s = y * 20, color = 'red', marker = 'o')
plt.xlabel('销售量', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 10}, labelpad = 10)
plt.ylabel('利润(万)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 10}, labelpad = 10)
plt.title('销售量与利润关系图', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 30}, loc = 'center')
for a, b, c in zip(x, y, z):
    plt.text(a, b, c, ha = 'center', va = 'center', fontsize = 20, color = 'white')
plt.xlim(0, 800)
plt.ylim(0, 120)
app = xw.App(visible = False)
workbook = app.books.open('E:\\Python案例操作2\\气泡图.xlsx')
worksheet = workbook.sheets[0]
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)
workbook.se('E:\\Python案例操作2\\气泡图1.xlsx')
workbook.close()
app.quit()

In [11]:

# 案例04 制作饼图展示部分和总体的比例关系
import pandas as pd  # 导入pandas模块
import matplotlib.pyplot as plt  # 导入Matplotlib模块
import xlwings as xw  # 导入xlwings模块
df = pd.read_excel('E:\\Python案例操作2\\饼图.xlsx')  # 从指定工作簿中读取数据
figure = plt.figure()  # 创建一个绘图窗口
plt.rcParams['font.sans-serif']=['SimHei']  # 为图表中的中文文本设置默认字体,以避免中文显示乱码的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标值为负数时无法正常显示负号的问题
x = df['产品名称']  # 指定数据中的“产品名称”列作为各个类别的标签
y = df['销售额']  # 指定数据中的“销售额”列用于计算各个类别的占比
plt.pie(y, labels = x, labeldistance = 1.1, autopct = '%.2f%%', pctdistance = 0.8, startangle = 90, radius = 1.0, explode = [0, 0, 0, 0, 0, 0.3, 0])  # 制作饼图并分离饼图块
plt.title(label = '产品销售额占比图', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')  # 添加并设置图表标题
app = xw.App(visible = False)  # 启动Excel程序
workbook = app.books.open('E:\\Python案例操作2\\饼图.xlsx')  # 打开要插入图表的工作簿
worksheet = workbook.sheets[0]  # 选中第一个工作表
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)  # 在工作表中插入制作的饼图
workbook.se('E:\\Python案例操作2\\饼图1.xlsx')  # 保存工作簿
workbook.close()  # 关闭工作簿
app.quit()  # 退出Excel程序

In [12]:

# 案例04-1 制作圆环图
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('E:\\Python案例操作2\\饼图.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['产品名称']
y = df['销售额']
plt.pie(y, labels = x, autopct = '%.2f%%', pctdistance = 0.85, radius = 1.0, labeldistance = 1.1, wedgeprops = {'width' : 0.3, 'linewidth' : 2, 'edgecolor' : 'white'})
plt.title(label = '产品销售额占比图', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')
app = xw.App(visible = False)
workbook = app.books.open('E:\\Python案例操作2\\饼图.xlsx')
worksheet = workbook.sheets[0]
worksheet.pictures.add(figure, name = '图片1', update = True, left = 200)
workbook.se('E:\\Python案例操作2\\饼图2.xlsx')
workbook.close()
app.quit()

In [13]:

# 案例05 制作雷达图对比多项指标
import pandas as pd  # 导入pandas模块
import numpy as np  # 导入NumPy模块
import matplotlib.pyplot as plt  # 导入Matplotlib模块
df = pd.read_excel('E:\\Python案例操作2\\雷达图.xlsx')  # 从指定工作簿中读取数据
df = df.set_index('能评价指标')  # 将数据中的“能评价指标”列设置为行索引
df = df.T  # 转置数据表格
df.index.name = '品'  # 将转置后数据中行索引那一列的名称修改为“品”
def plot_radar(data, feature):  # 自定义一个函数用于制作雷达图
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 为图表中的中文文本设置默认字体,以避免中文显示乱码的问题
    plt.rcParams['axes.unicode_minus'] = False  # 解决坐标值为负数时无法正常显示负号的问题
    cols = ['动力', '燃油经济', '制动', '操控稳定', '行驶平顺', '通过', '安全', '环保']  # 指定各个品要显示的能评价指标的名称
    colors = ['green', 'blue', 'red', 'yellow']  # 为每个品设置图表中的显示颜色
    angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(cols), endpoint = False)  # 根据要显示的指标个数对圆形进行等分
    angles = np.concatenate((angles, [angles[0]]))  # 连接刻度线数据
    fig = plt.figure(figsize = (8, 8))  # 设置显示图表的窗口大小
    ax = fig.add_subplot(111, polar = True)  # 设置图表在窗口中的显示位置,并设置坐标轴为极坐标体系
    for i, c in enumerate(feature):  
        stats = data.loc[c]  # 获取品对应的指标数据
        stats = np.concatenate((stats, [stats[0]]))  # 连接品的指标数据
        ax.plot(angles, stats, '-', linewidth = 6, c = colors[i], label = '%s'%(c))  # 制作雷达图
        ax.fill(angles, stats, color = colors[i], alpha = 0.25)  # 为雷达图填充颜色
    ax.legend()  # 为雷达图添加图例
    ax.set_yticklabels([])  # 隐藏坐标轴数据
    ax.set_thetagrids(angles * 180 / np.pi, cols, fontsize = 16)  # 添加并设置数据标签
    plt.show()  # 显示制作的雷达图
    return fig
fig = plot_radar(df, ['A品','B品','C品','D品'])  # 调用自定义函数制作雷达图代码解析

In [14]:

# 案例05-1 制作某一品能评价指标雷达图
import pandas as pd  # 导入pandas模块
import numpy as np  # 导入NumPy模块
import matplotlib.pyplot as plt  # 导入Matplotlib模块
df = pd.read_excel('E:\\Python案例操作2\\雷达图.xlsx')  # 从指定工作簿中读取数据
df = df.set_index('能评价指标')  # 将数据中的“能评价指标”列设置为行索引
df = df.T  # 转置数据表格
df.index.name = '品'  # 将转置后数据中行索引那一列的名称修改为“品”
def plot_radar(data, feature):  # 自定义一个函数用于制作雷达图
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 为图表中的中文文本设置默认字体,以避免中文显示乱码的问题
    plt.rcParams['axes.unicode_minus'] = False  # 解决坐标值为负数时无法正常显示负号的问题
    cols = ['动力', '燃油经济', '制动', '操控稳定', '行驶平顺', '通过', '安全', '环保']  # 指定各个品要显示的能评价指标的名称
    colors = ['green', 'blue', 'red', 'yellow']  # 为每个品设置图表中的显示颜色
    angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(cols), endpoint = False)  # 根据要显示的指标个数对圆形进行等分
    angles = np.concatenate((angles, [angles[0]]))  # 连接刻度线数据
    fig = plt.figure(figsize = (8, 8))  # 设置显示图表的窗口大小
    ax = fig.add_subplot(111, polar = True)  # 设置图表在窗口中的显示位置,并设置坐标轴为极坐标体系
    for i, c in enumerate(feature):  
        stats = data.loc[c]  # 获取品对应的指标数据
        stats = np.concatenate((stats, [stats[0]]))  # 连接品的指标数据
        ax.plot(angles, stats, '-', linewidth = 6, c = colors[i], label = '%s'%(c))  # 制作雷达图
        ax.fill(angles, stats, color = colors[i], alpha = 0.25)  # 为雷达图填充颜色
    ax.legend()  # 为雷达图添加图例
    ax.set_yticklabels([])  # 隐藏坐标轴数据
    ax.set_thetagrids(angles * 180 / np.pi, cols, fontsize = 16)  # 添加并设置数据标签
    plt.show()  # 显示制作的雷达图
    return fig
fig = plot_radar(df, ['A品'])   # 查看A品的能评价指标情况

In [15]:

# 案例06 制作温度计图展示工作进度
import pandas as pd  # 导入pandas模块
import matplotlib.pyplot as plt  # 导入Matplotlib模块
df = pd.read_excel('E:\\Python案例操作2\\温度计图.xlsx')  # 从指定工作簿中读取数据
sum = 0  # 定义变量sum,用于存储全年的实际销售业绩
for i in range(12):
    sum = df['销售业绩(万元)'][i] + sum  # 累加12个月的实际销售业绩,得到全年的实际销售业绩
goal = df['销售业绩(万元)'][13]  # 获取全年的目标销售业绩
percentage = sum / goal  # 计算全年的实际销售业绩占目标销售业绩的百分比
plt.bar(1, 1, color = 'yellow')  # 制作柱形图展示全年的目标销售业绩,设置填充颜色为
plt.bar(1, percentage, color = 'cyan')  # 制作柱形图展示全年的实际销售业绩,设置填充颜色为青色
plt.xlim(0, 2)  # 设置图表x轴的取值范围
plt.ylim(0, 1.2)  # 设置图表y轴的取值范围
plt.text(1, percentage - 0.01, percentage, ha = 'center', va = 'top', fontdict = {'color' : 'black', 'size' : 20})  # 添加并设置数据标签
plt.show()  # 显示制作的温度计图

In [17]:

# 案例06-1 制作上半年销售业绩的温度计图
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('E:\\Python案例操作2\\温度计图.xlsx')
sum = 0
for i in range(6):
    sum = df['销售业绩(万元)'][i] + sum  
goal = df['销售业绩(万元)'][13]  
percentage = sum / goal
plt.bar(1, 1, color = 'yellow')
plt.bar(1, percentage, color = 'cyan')
plt.xlim(0, 2)
plt.ylim(0, 1.2)
plt.text(1, percentage - 0.01, percentage, ha = 'center', va = 'top', fontdict = {'color' : 'black', 'size' : 20})
plt.show()

链接:https://pan.baidu.com/s/11c2APwfw66QLK2nx-XBF3w

提取码:kzji

本文地址: https://www.tanjiaoyicn.com/n/597.html

版权声明:本文内容部分来源互联网用户自发贡献或其他公众平台,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们,一经查实,本站将立刻删除,如若转载,请注明出处。

发表评论
登录 后才能评论
评论列表(1条)
  • 姚霞月
    转发了

    联系我们

    93840186

    在线咨询: QQ交谈

    邮件:baban38@163.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注微信