【问题标题】:max_col only selecting two columns when creating pie-chart using openpyxl使用 openpyxl 创建饼图时,max_col 仅选择两列
【发布时间】:2020-02-12 16:56:01
【问题描述】:

我正在尝试创建一个饼图,其中数据在行中,标签在列中。我想在第 2 行和第 4 列绘制数据。但是当我运行时,它只选择两列。下面是代码:

from openpyxl import Workbook

from openpyxl.chart import (
    PieChart,
    ProjectedPieChart,
    Reference
)
from openpyxl.chart.series import DataPoint

data = [
    ['Pie', 'Sold','Added','New','extra'],
    ['Apple', 50,3,4,5],
    ['Cherry', 30,5,6,7],
    ['Pumpkin', 10,7,8,99],
    ['Chocolate', 40,10,29,23],
]

wb = Workbook()
ws = wb.active

for row in data:
    ws.append(row)

pie = PieChart()
labels = Reference(ws, min_row=1, min_col=2, max_col=4)
data = Reference(ws, min_col=2, min_row=2, max_col=4)
pie.add_data(data, titles_from_data=True)
pie.set_categories(labels)
pie.title = "Pies sold by category"
ws.add_chart(pie, "G20")


ws = wb.create_sheet(title="Projection")
wb.save("pie.xlsx")

这是我的结果:

但我希望:

我的问题:我尝试将 max_col 更改为不同的数字,但它只选择 2

【问题讨论】:

  • 您想根据excel的观点选择A到D列..rit..??
  • 我想为第 2 行(即 Apple)创建一个饼图,饼图的数据取自单元格 B2、C2、D2。如果我理解正确,在代码中min_colmax_col 决定列选择的范围。就我而言,labels = Reference(ws, min_row=1, min_col=2, max_col=4) 可以正常工作,而data = Reference(ws, min_col=2, min_row=2, max_col=4) 则不行。

标签: python openpyxl pie-chart


【解决方案1】:

我使用 Openxlpy 的次数不多,但看看下面几行是否有助于解决与循环相关的查询..

import openpyxl
wb = openpyxl.load_workbook(r'yourfile.xlsx')
ws = wb['yoursheet']

for rowno, rowval in enumerate(ws.iter_rows( min_col=2, min_row=2,max_col=4)):
    for cell in rowval:
        label = ws.cell(row=cell.row, column=1).value
        print(label)
        data = ws.cell(row=cell.row, column=2).value
        print(data)

【讨论】:

  • 我的问题与循环无关。我想在 excel 中创建一个饼图,data = Reference(ws, min_col=2, min_row=2, max_col=4) 正在为其选择数据,当在pie.add_data(data, titles_from_data=True) 中调用数据时,这条线没有给出令人满意的结果。我试过你的代码,但它不起作用。
【解决方案2】:

查看源代码后,我找到了解决方案。 pie.add_data 默认情况下将每一列视为数据系列。因此,我需要在pie.add_data 中添加from_rows 值以选择该行作为数据系列,并且必须在data = Reference(ws, min_col=1, min_row=2, max_col=4) 中更新min_col。以下是所需的工作代码:

from openpyxl import Workbook

from openpyxl.chart import (
    PieChart,
    ProjectedPieChart,
    Reference
)
from openpyxl.chart.series import DataPoint

data = [
    ['Pie', 'Sold','Added','New','extra'],
    ['Apple', 50,3,4,5],
    ['Cherry', 30,5,6,7],
    ['Pumpkin', 10,7,8,99],
    ['Chocolate', 40,10,29,23],
]

wb = Workbook()
ws = wb.active

for row in data:
    ws.append(row)

pie = PieChart()
labels = Reference(ws, min_row=1, min_col=2, max_col=4)
data = Reference(ws, min_col=1, min_row=2, max_col=4)
#data = Reference(ws, range_string='Sheet!$B$2:$D$2')

pie.add_data(data, from_rows=2,titles_from_data=True)
pie.set_categories(labels)
pie.title = "Pies sold by category"
ws.add_chart(pie, "H2")


ws = wb.create_sheet(title="Projection")
wb.save("pie.xlsx")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多