Python 如何使用openpyxl创建预测值图表?
我有一些数据,其中包括实际值和预测值。有没有一种方法可以用openpyxl来表示这一点 资料Python 如何使用openpyxl创建预测值图表?,python,openpyxl,Python,Openpyxl,我有一些数据,其中包括实际值和预测值。有没有一种方法可以用openpyxl来表示这一点 资料 实际预测 1月10日 2000年2月11日 2000年3月12日 2009年4月15日 137k年5月 六月125k 167k年7月 184k年8月 2009年9月20日 十月二十二日 2000年11月24日 十二月二十九日 渴望的 做 欢迎提出任何建议您可以创建一个包含2个系列的系列:1个系列的Y轴值来自实际列,1个系列的Y轴值来自预测列。两个系列都将使用从第1列开始的月份作为X轴值 这些步骤是:
实际预测
1月10日
2000年2月11日
2000年3月12日
2009年4月15日
137k年5月
六月125k
167k年7月
184k年8月
2009年9月20日
十月二十二日
2000年11月24日
十二月二十九日
渴望的
做
欢迎提出任何建议您可以创建一个包含2个系列的系列:1个系列的Y轴值来自实际列,1个系列的Y轴值来自预测列。两个系列都将使用从第1列开始的月份作为X轴值
这些步骤是:
.add_data
或.append
将Y值添加为系列
将图表添加到工作表中。添加图表
k
后缀,这使得它不是数字,并且无法通过openpyxl正确打印(即使在Excel中,它也被视为文本,打印时等于0)。我假设“100k”是“100000”的意思,所以为了让事情更简单,让我们用“100”代替“100k”,把“k”放在标签中,比如“实际(k)”
如果Excel文件中已有该数据,如下所示:
然后在折线图中绘制的代码如下所示:
从openpyxl导入加载\u工作簿
从openpyxl.chart导入折线图、参考、系列
#path=“C:/Users/tanisha.hudson/wb1.xlsx”
路径='wb1.xlsx'
wb=加载\u工作簿(路径)
ws=wb.active
c1=线形图()
c1.title=‘图表标题’
c1.legend.position='b'#https://openpyxl.readthedocs.io/en/stable/charts/chart_layout.html#legend-布局
实际值=参考值(ws,最小列=2,最大列=2,最小列=1,最大列=13)
实际_系列=系列(实际_值,标题_来自_数据=真)
c1.追加(实际_系列)
预测值=参考值(ws,最小列=3,最大列=3,最小行=1,最大行=13)
预测系列=系列(预测值,标题来自数据=真)
c1.追加(预测系列)
xaxis_值=参考(ws,最小列=1,最大列=1,最小行=2,最大行=13)
c1.设置_类别(xaxis_值)
ws.add_图表(c1,‘E2’)
wb.save('wb1-chart.xlsx')
注:
行/列从1开始(不像典型数组中的0)。例如,实际_值
引用范围列B和行1-13
包含标题为“实际”和“预测”的行,因为在创建系列时,我们使用title\u from\u data=True
。您可以省略标题行,并使用title=
参数分别设置Series
标题
不要忘记调用.add_chart
将折线图添加到工作表中。另外,最好。将其另存为一个文件,以防弄乱原始工作表
输出:
请注意,由于实际数据值和预测数据值也未连接,因此2系列未连接。解决方法是添加一个公共数据点。例如,将Jun=125添加到Forecast列():
wb=load\u工作簿(路径)
ws=wb.active
ws['C7'].value=ws['B7'].value#将上次实际值复制为预测值
...
现在,如果您的输入数据确实有一个k
后缀,并且您不想手动修改它们以去除该k
,只需在打印之前使用openpyxl重写这些值:
用于范围(2,14)中的行:#B2-B13,C2-C13
对于范围(2,4)中的列:#B-C
cell=ws.cell(列=列,行=行)
old_val=cell.value
新值=整数(旧值替换('k',''),如果旧值为“其他”
cell.value=新值
ws['C7'].value=ws['B7'].value
有关更多信息,请参阅openpyxl文档的部分。
如果某些功能是特定于版本的:Python 3.8.8、openpyxl 3.0.7、Office 2016。现在运行代码时会得到什么?你有错误吗?从的openpyxl文档中,您似乎缺少对.add\u chart
和的调用。save
。谢谢@Gino-您能看看我的最新帖子吗?它涉及面积图的透明度。我一直在研究这个问题,不知道如何增加透明度层。谢谢
from openpyxl import Workbook
from openpyxl.chart import (
LineChart,
BarChart,
Reference,
Series,
)
wb = Workbook()
ws = wb.active
path = "C:/Users/tanisha.hudson/wb1.xlsx"
wb_obj = load_workbook(path)
sheet_obj = wb_obj.active
c1 = LineChart()
v1 = Reference(ws, min_col=1, min_row=1, max_col=13)
c1.add_data(v1, titles_from_data=True, from_rows=True)
c1.x_axis.title = 'Chart Title'
c1.y_axis.majorGridlines = None