使用Openpyxl配置Excel折线图(Line Chart)样式的技术求助
Python Excel图表样式配置问题解决方法
假设你使用的是xlsxwriter库(若用openpyxl,思路类似但API不同),以下是针对你7个样式需求的完整解决方案:
import pandas as pd from xlsxwriter import Workbook # 示例DataFrame data = { '日期': ['2024-01', '2024-02', '2024-03', '2024-04'], '销量': [120, 150, 180, 210], '利润': [20, 30, 45, 55] } df = pd.DataFrame(data) # 创建Excel工作簿和工作表 with Workbook('带样式图表的Excel.xlsx') as workbook: worksheet = workbook.add_worksheet('数据与图表') # 将DataFrame写入工作表 df.to_excel(workbook, sheet_name='数据与图表', startrow=0, startcol=0, index=False) # 创建折线图对象 chart = workbook.add_chart({'type': 'line'}) # 配置图表数据系列,同时设置数据标签位置和颜色 chart.add_series({ 'name': '=数据与图表!$B$1', 'categories': '=数据与图表!$A$2:$A$5', 'values': '=数据与图表!$B$2:$B$5', 'data_labels': {'position': 'above', 'font': {'color': '#FF0000'}} }) chart.add_series({ 'name': '=数据与图表!$C$1', 'categories': '=数据与图表!$A$2:$A$5', 'values': '=数据与图表!$C$2:$C$5', 'data_labels': {'position': 'above', 'font': {'color': '#0000FF'}} }) # 1. 应用Style 12 chart.set_style(12) # 3. 移除主要网格线 chart.set_x_axis({'major_gridlines': {'visible': False}}) chart.set_y_axis({'major_gridlines': {'visible': False}}) # 4. 取消标题粗体 chart.set_title({ 'name': '销量与利润趋势', 'font': {'bold': False} }) # 5. 调整图表尺寸(单位:像素) chart.set_size({'width': 800, 'height': 500}) # 7. 移除绘图区背景 chart.set_plotarea({'fill': {'color': 'none'}}) # 将图表插入工作表 worksheet.insert_chart('E2', chart)
各需求对应代码说明:
- 1. 应用Style 12:通过
chart.set_style(12)调用内置样式,xlsxwriter支持1-48号内置图表样式。 - 2. 设置Data Labels位于“Above”:在
add_series的data_labels参数中指定'position': 'above'。 - 3. 移除Major Gridlines:通过
set_x_axis和set_y_axis分别关闭x、y轴主网格线的可见性。 - 4. 取消标题粗体:在
set_title的font参数里设置'bold': False。 - 5. 调整图表尺寸:用
set_size指定宽度和高度(像素单位)。 - 6. 修改Data Labels颜色:在
data_labels的font参数中设置十六进制颜色码。 - 7. 移除绘图区背景:通过
set_plotarea将填充颜色设为'none'。
若你使用openpyxl,对应调整思路:
- 应用样式:
chart.style = 12 - 数据标签位置:
series.data_labels.position = 'above' - 移除网格线:
chart.x_axis.majorGridlines = None、chart.y_axis.majorGridlines = None - 取消标题粗体:
chart.title.font.bold = False - 调整尺寸:直接赋值
chart.width和chart.height(单位依版本为cm或像素) - 数据标签颜色:
series.data_labels.font.color = colors.Color(rgb="FF0000") - 移除绘图区背景:
chart.plot_area.fill = PatternFill(fill_type=None)
内容的提问来源于stack exchange,提问作者Berny
相关产品推荐
相关产品推荐

