如何在循环中给图表一个带有迭代器值的标题?
How to give a chart a title with iterator value in a loop?
我想循环添加标题(来自列表 titles
)到我的每个图表,但是当我尝试向图表添加文本框(使用迭代器)时循环失败).是否允许迭代器值用作图表的标题?我正在使用 Python 3.6。有什么想法吗?
cleaned = [['AF In', 0.281777948141098], ['AF Top', 0.11941492557525635], ['AF View', 12.46446630278714], ['AF Non', 'AF V', 0.6745020151138306, 0.6817344427108765], ['AF Cab', 'AF N', 'AF HB', 0.6878681182861328, 0.2603790760040283, 0.05175277590751648]]
titles = ['first', 'second', 'third', 'fourth', 'fifth']
from pptx import Presentation
from pptx.chart.data import ChartData
from pptx.chart.data import XyChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches,Pt
from pptx.enum.chart import XL_LABEL_POSITION
from pptx.dml.color import RGBColor
from pptx.dml import fill
from pptx.chart.chart import ChartTitle
from pptx.chart.chart import Chart
# create presentation
prs = Presentation()
#For each list items from query_results (cleaned)
for idx, (chart_result, t) in enumerate(zip(cleaned, titles)):
#define size of chart
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
try:
#split the results into two arrays
arr1, arr2 = np.array_split(chart_result,2)
#create a table for chart data
chart_data = CategoryChartData()
#assign arr1 to categories
chart_data.categories = arr1
#assign arr2 to series
chart_data.add_series('series_1',(float(x) for x in arr2))
#add slide
prs.slides.add_slide(prs.slide_layouts[6])
#add chart to slide by index
prs.slides[idx].shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data)
#chart = shapes[0].chart
chart.chart_title.text_frame.text = t
except:
print(f'chart load failed {idx}')
确保您确实有对图表对象的引用;我没有在您的代码中看到可以提供给您的行。我推荐:
chart = prs.slides[idx].shapes.add_chart(...).chart
.add_chart()
返回的对象是一个图形框架形状。此形状 包含 图表,它是使用 .chart
属性.
获得的
那么你在 try 块最后一行的赋值应该会成功。
我发现我的代码在幻灯片中迭代了两次。
我替换了以下代码:
#add slide
prs.slides.add_slide(prs.slide_layouts[6])
#add chart to slide by index
prs.slides[idx].shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data)
#chart = shapes[0].chart
chart.chart_title.text_frame.text = t
使用以下代码:
#add slide
slide = prs.slides.add_slide(prs.slide_layouts[6])
#add chart to slide with title
chart = slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data).chart
chart.chart_title.text_frame.text = t
我认为 prs.slides[idx]
搞砸了。
我想循环添加标题(来自列表 titles
)到我的每个图表,但是当我尝试向图表添加文本框(使用迭代器)时循环失败).是否允许迭代器值用作图表的标题?我正在使用 Python 3.6。有什么想法吗?
cleaned = [['AF In', 0.281777948141098], ['AF Top', 0.11941492557525635], ['AF View', 12.46446630278714], ['AF Non', 'AF V', 0.6745020151138306, 0.6817344427108765], ['AF Cab', 'AF N', 'AF HB', 0.6878681182861328, 0.2603790760040283, 0.05175277590751648]]
titles = ['first', 'second', 'third', 'fourth', 'fifth']
from pptx import Presentation
from pptx.chart.data import ChartData
from pptx.chart.data import XyChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches,Pt
from pptx.enum.chart import XL_LABEL_POSITION
from pptx.dml.color import RGBColor
from pptx.dml import fill
from pptx.chart.chart import ChartTitle
from pptx.chart.chart import Chart
# create presentation
prs = Presentation()
#For each list items from query_results (cleaned)
for idx, (chart_result, t) in enumerate(zip(cleaned, titles)):
#define size of chart
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
try:
#split the results into two arrays
arr1, arr2 = np.array_split(chart_result,2)
#create a table for chart data
chart_data = CategoryChartData()
#assign arr1 to categories
chart_data.categories = arr1
#assign arr2 to series
chart_data.add_series('series_1',(float(x) for x in arr2))
#add slide
prs.slides.add_slide(prs.slide_layouts[6])
#add chart to slide by index
prs.slides[idx].shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data)
#chart = shapes[0].chart
chart.chart_title.text_frame.text = t
except:
print(f'chart load failed {idx}')
确保您确实有对图表对象的引用;我没有在您的代码中看到可以提供给您的行。我推荐:
chart = prs.slides[idx].shapes.add_chart(...).chart
.add_chart()
返回的对象是一个图形框架形状。此形状 包含 图表,它是使用 .chart
属性.
那么你在 try 块最后一行的赋值应该会成功。
我发现我的代码在幻灯片中迭代了两次。 我替换了以下代码:
#add slide prs.slides.add_slide(prs.slide_layouts[6]) #add chart to slide by index prs.slides[idx].shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data) #chart = shapes[0].chart chart.chart_title.text_frame.text = t
使用以下代码:
#add slide slide = prs.slides.add_slide(prs.slide_layouts[6]) #add chart to slide with title chart = slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data).chart chart.chart_title.text_frame.text = t
我认为 prs.slides[idx]
搞砸了。