def create_line(df, wb, sheet_name, startcol=0):
    df_columns = df.columns.tolist()
    ws = wb[sheet_name]

    # Chart with date axis
    chart = LineChart()
    chart.y_axis.title = 'intensity_of_emotion'
    chart.grouping = "standard"

    if sheet_name != 'max_by_resp':
        chart.title = sheet_name
        chart.x_axis.title = df_columns[1]
        chart.height = 15
        chart.width = 30
        data = Reference(ws, min_col=startcol + 3, min_row=1, max_col=len(df_columns) + startcol,
                         max_row=len(df) + 1)
        chart.add_data(data, titles_from_data=True)
        episodes = Reference(ws, min_col=startcol + 2, min_row=2, max_row=len(df) + 1)
    else:
        chart.height = 10
        chart.width = 20
        chart.title = df.at[0, 'user_id']
        chart.x_axis.title = df_columns[2]
        data = Reference(ws, min_col=startcol + 4, min_row=1, max_col=startcol + len(df_columns),
                         max_row=len(df) + 1)
        chart.add_data(data, titles_from_data=True)
        episodes = Reference(ws, min_col=startcol + 3, min_row=2, max_row=len(df) + 1)

    chart.set_categories(episodes)
    for i in chart.series:
        i.smooth = True

    letter = get_column_letter(startcol + 1)
    ws.add_chart(chart, f"{letter}{len(df) + 3}")
Example #2
0
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference

wb = Workbook()
ws = wb.active

df = pd.read_csv('monthly_sales.csv')
ws.append(df.columns.tolist())
for row in df.values:
    ws.append(list(row))

row_length = 1 + len(df.values)
data = Reference(ws, min_col=2, max_col=4, min_row=1, max_row=row_length)
categories = Reference(ws, min_col=1, min_row=2, max_row=row_length)

chart = LineChart()
chart.grouping = 'stacked'
chart.overlap = 100
chart.title = '月別売り上げ'
chart.y_axis.title = '売上'
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)

percent_stacked = deepcopy(chart)
percent_stacked.grouping = 'percentStacked'
percent_stacked.title = '月別売り上げ (100%積み上げ)'

ws.add_chart(chart, 'A9')
ws.add_chart(percent_stacked, 'A25')
wb.save('monthly_sales_line.xlsx')