使用XlsxWriter模块修改图表标签方向(Python)

时间:2013-06-17 10:35:46

标签: python xlsxwriter

我决定使用XlsxWriter为许多国家/地区生产通用输出产品。虽然我对模块的灵活性印象深刻,但我似乎无法弄清楚如何适当地修改图表中的标签。 'text_wrap'功能似乎不包含在'set_x_axis'中,这导致非常长的标签旋转45度。从下面可以看出,无论如何我试图让它发生(只是为了看看会发生什么),并忽略该语句。

"""Allow for text wrap for x_axis labels (doesn't seem to do anything)"""
chart_list[2].set_x_axis({'text_wrap':True})

结果是图表区域保持在外部边界的指定尺寸,但绘图区域本身由标签长度支配。有没有人知道如何做到这一点?现在,我唯一的(subpar)解决方案是减小字体大小并使用缩写。这带来了失去清晰度,没有解释性文字的余地。

更新:我正在包含一个代码块来演示所请求的标签长度​​。 (抱歉延迟了,我最终被淹没了,不得不把它放下。)你可以看到所需标签的长度。他们最终走出对角线并压扁了图表区域。我还没有能够测试你的修复,但我确实觉得我需要回答你的具体内容。我希望这些标签被包裹而不是对角线(我通常将其描述为标签方向)。谢谢参观! (是的,标签不正确。我的意思是类别标签......)

 """Chart III - Macro-Level Comparisons in Euros >>> 
    (GDP per capita,Average Gross Annual Salary, Government Expenditure per capita) translates to ...
    Index(Per Capita GDP (Euros), Average gross annual salary (Euros), Public Expenditure Per Capita (€))
    DATA: All must be written to new sheet from outdset_build(country)
    """
    #Create list of relevant figures (have to use lev distance because the euro symbol causes match problems)
    chart3_figures=['Per Capita GDP (Euros)', 'Average gross annual salary (Euros)', 'Public Expenditure Per Capita (€)']
    c3_figs=[]
    for i in range(len(chart3_figures)):
        figs=process.extract(chart3_figures[i],outdset_build(country).index.get_level_values('figure'),limit=1)[0]
        c3_figs.append(figs[0])
    #Generate subindex to subset data 
    chart3_index=outdset_build(country).index.get_level_values('figure').isin(c3_figs)
    #Subset data
    chart3_data=outdset_build(country)[chart3_index]

    #Create new sheet
    temp_data=jagx.add_worksheet('misc_data')

    #Write data to new sheet
    temp_data.write_row('A1',['index','EU','EU-10','CROATIA'])
    temp_data.write_column('A2', ['Per Capita GDP','Average Gross Annual Salary', \
                                  'Public Expenditure Per Capita'])
    temp_data.write_column('B2',chart3_data['EU'])
    temp_data.write_column('C2',chart3_data['EU-10'])
    temp_data.write_column('D2',chart3_data[country])

    #Configure series
    chart_list[2].add_series({
          'name':'EU',
          'categories':'misc_data!A2:A4',
          'values':'misc_data!B2:B4'
    })
    chart_list[2].add_series({
          'name':'EU-10',
          'categories':'misc_data!A2:A4',
          'values':'misc_data!C2:C4'
    })
    chart_list[2].add_series({
          'name':'CROATIA',
          'categories':'misc_data!A2:A4',
          'values':'misc_data!D2:D4'
    })
    #Add title 
    chart_list[2].set_title({'name':'Macro-level Comparison in Euros (per capita)','name_font':{'size':9}})

1 个答案:

答案 0 :(得分:2)

你能澄清一下吗?标题谈到了标签的定位,但正在谈论文本包装。另外,我不清楚你的标签是什么意思。在Excel图表中,标签与数据点相关联。从代码看起来你试图包装轴标题(Excel的名称)。

很抱歉听起来很挑剔,我只是想澄清一下这是什么问题。如果需要,我愿意修理它。也许你可以通过一个小例子来更新你的帖子。

GitHub头中支持轴编号字体和轴标题字体方向,尽管它还没有在PyPI中。但是,XlsxWriter(或afaik)不支持Excel标题的非自动文本换行。

更新:图表轴字体方向现在在PyPI上的XlsxWriter版本0.3.4中:

chart.set_x_axis({'num_font':  {'rotation': 45}})