openpyxl和excel的结合画折线图
1.电子表格中任意二维数据wookbook。2.用openpyxl读取sheet1中数据后,创建一个sheet2,里边用pyechars或者matplotlib画折线图
现在读表的内容会,
用matplotlib画折线图也会,
边读边画就不会了。。。
帮忙举个实例
你这俩都会了,咋放在一起就不会了呢?
你可以写俩函数,一个读,一个画图 qiuyouzhi 发表于 2020-5-15 13:30
你这俩都会了,咋放在一起就不会了呢?
你可以写俩函数,一个读,一个画图
读的数据,可以print
画的时候引用这个数值,引不明白。
来个实例啊 rsj0315 发表于 2020-5-15 13:52
读的数据,可以print
画的时候引用这个数值,引不明白。
来个实例啊
你只需要把print打印的内容放进变量里面就好鸭 你发几行数据,我试试看写 Twilight6 发表于 2020-5-15 19:56
你发几行数据,我试试看写
A列是时间,按天;
B列是销量,随便给点数据;
C列是成本,随便给点数据;
D列是售价,随便给点数据;
E列是利润率,这个用公式在表格里用百分比显示 rsj0315 发表于 2020-5-16 11:09
A列是时间,按天;
B列是销量,随便给点数据;
C列是成本,随便给点数据;
你能随便写几行嘛哈哈
两三行也行~~ Twilight6 发表于 2020-5-16 11:11
你能随便写几行嘛哈哈
两三行也行~~
折线图或柱状图都可以
1.实现日期和利润的二维图标,x轴时间,y利润
2.在1的基础上,添加图例选项,显示A和B的利润状况
3.在2的基础上,添加利润率的情况
4.不知道一张图标能能否复合上述所有信息内容?
8楼是表格附件 上传不了电子表格的附件,贴张图吧 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.value,row.value)
date_lst.append(row.value)
profit_lst.append(row.value)
plt.plot(date_lst,profit_lst)
plt.show()
path = r'C:\Users\xxx\Desktop\实例.xlsx'
get_data(path)
各位看看,为啥y坐标不是数值呢?我在开始选择read——only了啊。
@zltzlt
@Twilight6 rsj0315 发表于 2020-5-18 21:02
@zltzlt
@Twilight6
我不会xlsx的数据处理,你能告诉我D列,C列,E列数据怎么表示的吗? rsj0315 发表于 2020-5-18 21:02
@zltzlt
@Twilight6
y轴刻度设置
plt.yticks('y轴的数量填这')
要不直接表示最后一行的利润,反正那个就是D,C,E计算的结果
Twilight6 发表于 2020-5-18 21:20
要不直接表示最后一行的利润,反正那个就是D,C,E计算的结果
我现在画的是第一问,时间与利润的二维坐标图。
但是不知道为啥利润的数值老是显示公式,如果显示成数值就应该是对的 高手,高手! 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.value,row.value)
date_lst.append(row.value)
profit_lst.append(row.value)
plt.plot(date_lst,profit_lst)
plt.show()
path = r'C:\Users\xxx\Desktop\实例.xlsx'
get_data(path) 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.value,row.value)
date_lst.append(row.value)
profit_lst.append(row.value)
price_lst.append(row.value)
sale_price_lst.append(row.value)
sale_num_lst.append(row.value)
profit_rate_lst.append(row.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商品,最好把两个商品分开,图例显示。
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.value,row.value)
date_lst.append(row.value)
profit_lst.append(row.value)
price_lst.append(row.value)
sale_price_lst.append(row.value)
sale_num_lst.append(row.value)
profit_rate_lst.append(row.value)
return date_lst,profit_lst,price_lst,sale_price_lst,sale_num_lst,profit_rate_lst
把遍历出来的数值都append到一个列表里,然后return出来。
画图函数在去打散这个元组,进行数据选取画图。
画到17楼了,还有进一步的问题尝试,欢迎指导! rsj0315 发表于 2020-5-18 22:53
date_lst = []
profit_lst = []
price_lst = []
很强!!!{:10_268:}鼓掌!!
页:
[1]