图表对象列表但不是所有图表

时间:2016-04-22 20:24:56

标签: python-3.x matplotlib xlwings

我试图在列表中收集一系列图表,然后将它们全部输出到Excel中。

该列表将所有图表显示为" matplotlib.figure.Figure at(example)0xb8eae80"但不会显示所有这些。当prog运行时,它们都显示在iPython(Spyder)控制台中。

如果我尝试使用iPython中的list [i]单独显示它们,一些图表显示但有些图表不存在(缺少相同的图表)。

对于输出到Excel,"缺少"图表有一个默认大小的空白画布,所以虽然XL正在获得有关图表存在的一些信息,但它甚至没有获得" figsize"资讯

下面示例代码中缺少的图表是针对具有多个线图的图表(它是一个快速示例,我意识到它可以更好地编写脚本)

感谢您的帮助。

示例代码(与原始代码有相同的问题):

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import xlwings as xw


ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
xdf = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD')) # splits out list into components
xdf = xdf.cumsum()

figlist = [] # set up list to collect charts (a list of objects)

fig = plt.figure()
xdf.A.plot(figsize = (9,5), grid=True) #plots individual column
plt.axhline(0,lw=2, color = "black")
plt.title('A')
figlist.append(fig)

fig = plt.figure()
xdf.B.plot(figsize = (9,5), grid=True) #plots individual column
plt.axhline(0,lw=2, color = "black")
plt.title('B')
figlist.append(fig)

fig = plt.figure()
xdf.C.plot(figsize = (9,5), grid=True) #plots individual column
plt.axhline(0,lw=2, color = "black")
plt.title('C')
figlist.append(fig)

fig = plt.figure()
xdf.D.plot(figsize = (9,5), grid=True) #plots individual column
plt.axhline(0,lw=2, color = "black")
plt.title('D')
figlist.append(fig)

fig = plt.figure()
xdf.plot(figsize = (9,5), grid=True) #plots all columns on same chart
plt.axhline(0,lw=2, color = "black")
plt.title('All')
figlist.append(fig)

# output all charts to XL
xw.Workbook() # open new workbook

for i in range(len(figlist)):
    plotno = 'Plot' + str(i)
    plot = xw.Plot(figlist[i])
    plot.show(plotno, left=30, top=(i*500+20))

1 个答案:

答案 0 :(得分:0)

您没有正确访问Pandas生成的图表中的图形对象,来自docs

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
ax = df.plot(kind='bar')
fig = ax.get_figure()

在你的情况下,像

ax = xdf.plot(figsize = (9,5), grid=True) #plots all columns on same chart
plt.axhline(0,lw=2, color = "black")
plt.title('All')
figlist.append(ax.get_figure())

应该为最后一张图表做点什么。