鱼C论坛

 找回密码
 立即注册
查看: 2199|回复: 18

[已解决]openpyxl和excel的结合画折线图

[复制链接]
发表于 2020-5-15 13:28:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.电子表格中任意二维数据wookbook。
2.用openpyxl读取sheet1中数据后,创建一个sheet2,里边用pyechars或者matplotlib画折线图

现在读表的内容会,
用matplotlib画折线图也会,
边读边画就不会了。。。

帮忙举个实例

最佳答案
2020-5-18 22:56:07
rsj0315 发表于 2020-5-18 22:53
date_lst = []
    profit_lst = []
    price_lst = []

很强!!!鼓掌!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-15 13:30:48 | 显示全部楼层
你这俩都会了,咋放在一起就不会了呢?
你可以写俩函数,一个读,一个画图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 13:52:20 | 显示全部楼层
qiuyouzhi 发表于 2020-5-15 13:30
你这俩都会了,咋放在一起就不会了呢?
你可以写俩函数,一个读,一个画图

读的数据,可以print
画的时候引用这个数值,引不明白。
来个实例啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-15 13:53:59 | 显示全部楼层
rsj0315 发表于 2020-5-15 13:52
读的数据,可以print
画的时候引用这个数值,引不明白。
来个实例啊

你只需要把print打印的内容放进变量里面就好鸭
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-15 19:56:44 | 显示全部楼层
你发几行数据,我试试看写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 11:09:56 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-5-15 19:56
你发几行数据,我试试看写

A列是时间,按天;
B列是销量,随便给点数据;
C列是成本,随便给点数据;
D列是售价,随便给点数据;
E列是利润率,这个用公式在表格里用百分比显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 11:11:03 | 显示全部楼层
rsj0315 发表于 2020-5-16 11:09
A列是时间,按天;
B列是销量,随便给点数据;
C列是成本,随便给点数据;

你能随便写几行嘛哈哈
两三行也行~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 21:32:05 | 显示全部楼层
Twilight6 发表于 2020-5-16 11:11
你能随便写几行嘛哈哈
两三行也行~~

折线图或柱状图都可以

1.实现日期和利润的二维图标,x轴时间,y利润
2.在1的基础上,添加图例选项,显示A和B的利润状况
3.在2的基础上,添加利润率的情况
4.不知道一张图标能能否复合上述所有信息内容?

8楼是表格附件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-16 21:33:55 | 显示全部楼层
上传不了电子表格的附件,贴张图吧
表格实例.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 21:00:16 | 显示全部楼层
import openpyxl as xl
import matplotlib.pyplot as plt

def get_data(path):
    wb = xl.load_workbook(path,read_only=True)
    ws = wb.active
    max_row = ws.max_row
    max_col = ws.max_column
    date_lst = []
    profit_lst = []
    for row in ws.iter_rows(min_row=2,max_row=max_row,max_col=max_col):
        # print(row[0].value,row[6].value)
        date_lst.append(row[0].value)
        profit_lst.append(row[6].value)
    plt.plot(date_lst,profit_lst)
    plt.show()
        

path = r'C:\Users\xxx\Desktop\实例.xlsx'
get_data(path)

各位看看,为啥y坐标不是数值呢?我在开始选择read——only了啊。
图.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 21:02:05 | 显示全部楼层
@zltzlt
@Twilight6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 21:16:36 | 显示全部楼层

我不会xlsx的数据处理,你能告诉我D列,C列,E列数据怎么表示的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 21:20:53 | 显示全部楼层
y轴刻度设置
plt.yticks('y轴的数量填这')

要不直接表示最后一行的利润,反正那个就是D,C,E计算的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 22:07:53 | 显示全部楼层
Twilight6 发表于 2020-5-18 21:20
要不直接表示最后一行的利润,反正那个就是D,C,E计算的结果

我现在画的是第一问,时间与利润的二维坐标图。
但是不知道为啥利润的数值老是显示公式,如果显示成数值就应该是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 22:14:40 | 显示全部楼层
高手,高手!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 22:22:05 | 显示全部楼层
rsj0315 发表于 2020-5-18 21:00
各位看看,为啥y坐标不是数值呢?我在开始选择read——only了啊。

应该是data_only

import openpyxl as xl
import matplotlib.pyplot as plt

def get_data(path):
    wb = xl.load_workbook(path,data_only=True)
    ws = wb.active
    max_row = ws.max_row
    max_col = ws.max_column
    date_lst = []
    profit_lst = []
    for row in ws.iter_rows(min_row=2,max_row=max_row,max_col=max_col):
        # print(row[0].value,row[6].value)
        date_lst.append(row[0].value)
        profit_lst.append(row[6].value)
    plt.plot(date_lst,profit_lst)
    plt.show()


path = r'C:\Users\xxx\Desktop\实例.xlsx'
get_data(path)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 22:49:55 | 显示全部楼层
5条曲线汇合到一张图标了,mark下
代码如下:
import openpyxl as xl
import matplotlib.pyplot as plt

def get_data(path):
    wb = xl.load_workbook(path,data_only=True)
    ws = wb.active
    max_row = ws.max_row
    max_col = ws.max_column
    date_lst = []
    profit_lst = []
    price_lst = []
    sale_price_lst = []
    sale_num_lst = []
    profit_rate_lst = []
    for row in ws.iter_rows(min_row=2,max_row=max_row,max_col=max_col):
        # print(row[0].value,row[6].value)
        date_lst.append(row[0].value)
        profit_lst.append(row[6].value)
        price_lst.append(row[2].value)
        sale_price_lst.append(row[3].value)
        sale_num_lst.append(row[4].value)
        profit_rate_lst.append(row[5].value)
    return date_lst,profit_lst,price_lst,sale_price_lst,sale_num_lst,profit_rate_lst

def chart(x,y1,y2,y3,y4,y5):
    plt.plot(x,y1)
    plt.plot(x,y2)
    plt.plot(x,y3)
    plt.plot(x,y4)
    plt.plot(x,y5)
    plt.show()

path = r'C:\Users\xxx\Desktop\实例.xlsx'
get_data(path)
chart(*get_data(path))
下一步:
里边把成本画成柱状图,便于和售价曲线对比看。
现在没有区分A和B商品,最好把两个商品分开,图例显示。


mark1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 22:53:57 | 显示全部楼层
Twilight6 发表于 2020-5-18 21:16
我不会xlsx的数据处理,你能告诉我D列,C列,E列数据怎么表示的吗?

date_lst = []
    profit_lst = []
    price_lst = []
    sale_price_lst = []
    sale_num_lst = []
    profit_rate_lst = []
    for row in ws.iter_rows(min_row=2,max_row=max_row,max_col=max_col):
        # print(row[0].value,row[6].value)
        date_lst.append(row[0].value)
        profit_lst.append(row[6].value)
        price_lst.append(row[2].value)
        sale_price_lst.append(row[3].value)
        sale_num_lst.append(row[4].value)
        profit_rate_lst.append(row[5].value)
    return date_lst,profit_lst,price_lst,sale_price_lst,sale_num_lst,profit_rate_lst
把遍历出来的数值都append到一个列表里,然后return出来。
画图函数在去打散这个元组,进行数据选取画图。
画到17楼了,还有进一步的问题尝试,欢迎指导!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 22:56:07 | 显示全部楼层    本楼为最佳答案   
rsj0315 发表于 2020-5-18 22:53
date_lst = []
    profit_lst = []
    price_lst = []

很强!!!鼓掌!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-21 04:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表