【问题标题】:`xlsxwriter` Line Transparency does not work unless color is changed除非更改颜色,否则`xlsxwriter` 行透明度不起作用
【发布时间】:2018-05-07 17:17:16
【问题描述】:

从文档中我看到可以对图表区域使用透明度。我想知道 XlsxWriter 是否支持折线图的透明度。语法:

chart.add_series({
    'name': 'something',
    'categories': [<excel range>],
    'values': [<excel range>],
    'line':   {'color': 'yellow','transparency': 25},
})

以黄色显示我的折线图。但是,没有透明度。

那么,折线图可以透明吗?如果是这样,正确的语法是什么?

我在 Python 3.6.3 上运行 Excel 2016。另外也许值得一提的是我如何使用 xlsxwriter:

 writer = pd.ExcelWriter(path, engine='xlsxwriter', datetime_format='dd-mmm-yy')

更新:

从接受的答案运行代码会产生所需的输出: 但是,如果在线条构造中没有使用颜色参数,透明度将不起作用:

import xlsxwriter

workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()

    # Create a new Chart object.
chart = workbook.add_chart({'type': 'line'})

# Write some data to add to plot on the chart.
data = [
    [1, 2, 3, 4, 5],
    [2, 4, 6, 8, 10],
    [3, 6, 9, 12, 15],
]

worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

# Configure the charts. In simplest case we just add some data series.
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5',
                  'line':   {'width':0.25,'transparency': 25}})

# Insert the chart into the worksheet.
worksheet.insert_chart('A7', chart)

workbook.close()

作为检查,我将颜色参数替换为宽度参数,实际上我们的线显示正确的宽度但没有透明度:

【问题讨论】:

    标签: python-3.x pandas xlsxwriter


    【解决方案1】:

    没有记录,但支持:

    import xlsxwriter
    
    workbook = xlsxwriter.Workbook('chart.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Create a new Chart object.
    chart = workbook.add_chart({'type': 'line'})
    
    # Write some data to add to plot on the chart.
    data = [
        [1, 2, 3, 4, 5],
        [2, 4, 6, 8, 10],
        [3, 6, 9, 12, 15],
    ]
    
    worksheet.write_column('A1', data[0])
    worksheet.write_column('B1', data[1])
    worksheet.write_column('C1', data[2])
    
    # Configure the charts. In simplest case we just add some data series.
    chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
    chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
    chart.add_series({'values': '=Sheet1!$C$1:$C$5',
                      'line':   {'color': 'yellow',
                                 'transparency': 25}})
    
    # Insert the chart into the worksheet.
    worksheet.insert_chart('A7', chart)
    
    workbook.close()
    

    输出(看到网格线通过黄线部分可见):

    更新:现在是documented

    更新 2:

    但是,如果在线条构造中没有使用颜色参数,透明度将不起作用:

    这是 Excel 中的默认行为。如果不指定颜色,则无法打开透明度。这是因为透明度在内部存储为颜色 alpha 值的百分比,例如:

            <a:ln>
              <a:solidFill>
                <a:srgbClr val="4F81BD">
                  <a:alpha val="50000"/>
                </a:srgbClr>
              </a:solidFill>
            </a:ln>
    

    这在 Excel 2015 及更高版本的界面中并不明显,尽管您可以看到当您更改透明度时线条从“自动”变为“实线”。在旧版本的 Excel 中,更清楚的是,您必须在更改透明度之前指定纯色。

    我将更新 XlsxWriter 文档以突出显示这一点。作为一种解决方法,用户应在更改透明度时指定颜色。

    【讨论】:

    • Interesting @jmcnamara 但是,以下代码不会生成具有透明度的折线图:` chart = workbook.add_chart({'type': 'line'}) chart.add_series({ 'name': 'Russell 2000', 'categories': ['Sheet1', 1, 24 + offset, bound, 24 + offset], 'values': ['Sheet1', 1 , 25 + offset, bound, 25 + offset], ' line': {'width': 1.5, 'transparency':25}, 'y2_axis': y2_axis, }) ` 我会粘贴 excel 结果,但我是菜鸟,哈哈。作为检查,我修改了宽度。透明度参数保持为 0 但线宽实际上是 1.5 pt
    • 嗨@jmcnamara 对此有什么想法吗?正如我所提到的,鉴于我目前的实施,您的解决方案不起作用
    • 我们观察到transparency参数不生效,除非color参数同时使用。
    • 我添加了一个错误报告:github.com/jmcnamara/XlsxWriter/issues/544
    • 添加了关于错误报告的更新。基本上这是 Excel 的默认行为。
    猜你喜欢
    • 2020-01-22
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多