У меня есть следующая проблема, когда я хочу сохранять реализованный график, беря заблаговременно данные о моем Excel, результат выходит у меня в мишени...
wb = openpyxl.load_workbook(j)
sheet = wb.get_sheet_by_name('{}'.format(itemm))
data = Reference(sheet, min_col=2, min_row=2, max_col=4, max_row=tt+1)
print data
c2 = LineChart()
c2.height = 6.80
c2.width = 19
c2.title = "Subastadas"
c2.style = 12
c2.y_axis.title = "Cantidad"
c2.y_axis.crossAx = 500
c2.x_axis = DateAxis(crossAx=100)
c2.x_axis.title = "Date"
c2.add_data(data=data, titles_from_data=True)
sheet.add_chart(c2, "H1")
wb.save(j)
Я Предполагаю, что старались использовать пример, поставленный в openpyxl на Линес Чартс , чтобы делать grГЎfico соответствующий.
По этому поводу, поскольку я не нашел bibliografГ - в в espaГ±ol, что подробно описал cГіmo делать lineChart полными в openpyxl , и материал, который leГ-do в inglГ©s, estГЎ разделено на части и рассеивает, мне казаться подходящим включать один cГіdigo завершает на частном лице, хотя sГ©, что вопрос такие как estГЎ, не должен быть отвеченным, я считаю, что это может быть видно tambiГ©n как вклад в сообщество.
Для того, чтобы оно функционировало cГіdigo, для себя должны импортировать следующие библиотеки, в этом случае одна не происходит openpyxl : date
, что он emplearГЎ, чтобы производить даты, что irГЎn потом в ось X
# se importa para los datos del eje X
from datetime import date
import openpyxl
from openpyxl import Workbook
# basicamente estas importaciones son para
# las lineas principales y secundarias del grafico
# tambien permite mostrarse los datos en la linea
# del gráfico. Fuente de esta idea:
# # https://stackoverflow.com/questions/48755936/python-openpyxl-remove-a-scatter-chart-gridlines
from openpyxl.chart.shapes import GraphicalProperties
from openpyxl.drawing.line import LineProperties
from openpyxl.chart.axis import ChartLines
from openpyxl.chart.label import DataLabelList
# los métodos a emplearse con chart
from openpyxl.chart import (
LineChart,
Reference,
label
)
# Formato para los ejes con fechas
# si quiere verse cuales son los formatos en
# Excel recomiendo ver el siguiente enlace
# https://support.office.com/es-es/article/texto-funci%C3%B3n-texto-20d5ac4d-7b94-49fd-bb38-93d29371225c
from openpyxl.chart.axis import DateAxis
Como не поставил себе ни данных, ни файла, эта часть опциональная и sГіlo он включается, чтобы воспроизводить результаты.
# ----------------------------------------
# Funcion de Ayuda
# Para copiar tablas N x M
# si quieres alguna posición especifica
# agregar listas vacias
# no optimo quizas pero reutilzas codigo
# ----------------------------------------
# USO:
# Si se quiere copiar las columnas C, D y F:
# table tendria que tener la siguiente forma:
# [[], [], [Datos C],[Datos D], [], [Datos D]]
# ----------------------------------------
def copyValuesTablas(table, sheet):
for nCol, lista in enumerate(table):
for nRow, valor in enumerate(lista):
sheet.cell(column=nCol+1, row=nRow+1, value=valor)
#print(nCol + 1, nRow + 1, valor) #control
# -----------------------------------------
# Datos Iniciales
# -----------------------------------------
# valores en las columnas
# y=x^2
A=[date(2018,3, i) for i in range(1,14)]
B=[x**2 for x in range(0,13)]
# nombre de cabeceras
A.insert(0, "Fecha")
B.insert(0,"Valor")
# tabla
tabla = [A, B]
# -----------------------------------------
# ----------------------------------------
# Configuracion del Entorno de Trabajo
# ----------------------------------------
wbDestiny = 'graficoLinea.xlsx'
# creamos un archivo que al final se salvará
myBook = Workbook()
# Se renombra Sheet por 'linePlot'
myBook.active.title = 'linePlot'
ws = myBook['linePlot']
# creación de los datos
copyValuesTablas(tabla, ws)
ws.column_dimensions['A'].width = 20 # Se asjuata el ancho de columna
# ----------------------------------------
Entre части, чтобы отпрыгивать в том, чтобы быть, уедь:
AquГ - cГіdigo
# ----------------------------------------
# Creación de Grafico
# ----------------------------------------
linePlot = LineChart()
# Titulos
linePlot.title = "Subastadas"
linePlot.y_axis.title = "Cantidad"
linePlot.x_axis.title = "Fecha"
# Estilos Formato Texto
linePlot.style = 12
linePlot.x_axis.number_format = 'd-mmm'
linePlot.x_axis.majorTimeUnit = "days"
# Dimensiones grafico
linePlot.height = 10
linePlot.width = 20
# ----------------------------------------
# Limites
# no lo inclui porque los titulos
# del eje x e y no lo requerian
# pero las dejos por si quieres
# experimentar con ellas
# ----------------------------------------
#linePlot.y_axis.crossAx = 500
#linePlot.x_axis = DateAxis(crossAx=100)
# Desactivar leyenda
linePlot.legend = None
# ----------------------------------------
# los datos son seleccionados desde la
# parte superior izquierda hasta la
# parte inferior derecha
# En este caso 'B2:B14' o (B,2):(B,14)
# ----------------------------------------
# se seleciona los datos de la columna B
# ----------------------------------------
data = Reference(ws, min_col=2, min_row=2, max_col=2, max_row=14)
linePlot.add_data(data, titles_from_data=True)
# Estilo Linea
lineSerie = linePlot.series[0]
lineSerie.smooth = True
lineSerie.graphicalProperties.line.solidFill = "00AAAA"
# Cubrir las lineas secundarias del grafico con color blanco
linePlot.y_axis.majorGridlines.spPr = GraphicalProperties(noFill = 'True')
linePlot.y_axis.majorGridlines.spPr.ln = LineProperties(solidFill = 'ffffff')
linePlot.x_axis.majorGridlines = ChartLines()
linePlot.x_axis.majorGridlines.spPr = GraphicalProperties(noFill = 'True')
linePlot.x_axis.majorGridlines.spPr.ln = LineProperties(solidFill = 'ffffff')
# Mostrar los datos en la linea ploteada
linePlot.dLbls = DataLabelList()
linePlot.dLbls.showVal = 1
# ----------------------------------------
# se seleciona los datos de la columna A
# correspondiemte a las fechas
# ----------------------------------------
# En este caso 'A2:A14' o (A,2):(A,14)
fechas = Reference(ws, min_col=1, min_row=2, max_col=1, max_row=14)
linePlot.set_categories(fechas)
# Se establece la posición
ws.add_chart(linePlot, "D2")
# Se guarda
myBook.save(wbDestiny)
Adicionalmente объект, созданный для этого ответа linePlot
Ваша серия (lineSerie = linePlot.series[0]
estГЎ в ней lГ-nea 134 под # Estilo Linea
) обладает другими mГ©todos как maker
, которые он позволяет определять стили для точек данных, как triГЎngulos, а именно беря пример, поставленный в начало этого ответа, podrГ, - чтобы иметь:
lineSerie.marker.symbol = "triangle"
lineSerie.marker.graphicalProperties.solidFill = "FF0000" # Marker filling
lineSerie.marker.graphicalProperties.line.solidFill = "FF0000" # Marker outline
В конце концов возможный определять тип lГ-nea и Вашей толщины, но в этом Гєltimo случай - в travГ©s средства ЭМУ mГЎs деталь в: Points, inches and Эму: Measuring units in Оффисе Опен XML , в этом смысле podrГ, - чтобы добавлять их следующий tambiГ©n:
lineSerie.graphicalProperties.line.solidFill = "00AAAA"
lineSerie.graphicalProperties.line.dashStyle = "sysDot"
lineSerie.graphicalProperties.line.width = 100050 # ancho en EMUs