图表中的xlsxwriter和垂直参考线

时间:2019-11-14 22:44:11

标签: python excel charts line xlsxwriter

我正在使用xlsxwriter生成excel工作表,尤其是折线图,否则我的工作效果非常好。

我想在同一条折线图中添加一条垂直线作为参考标记。

以下是在excel中实现的两个示例:

https://peltiertech.com/Excel/Charts/AddLineVertSeries.html

http://www.storytellingwithdata.com/blog/2018/8/7/tactical-tip-embedding-a-vertical-reference-line-in-excel

我不使用日期,但是示例基本上是相同的。

在最理想的情况下,我希望它表现如下:

  • 多条垂直线
  • 我希望能够以与X轴相同的比例(重要)来参考垂直线的X位置。
  • 我希望能够控制垂直线的高度,但是要与折线图的其余部分(例如0-100)分开控制(不是必需的,但很好)
  • 我不是特别希望在图例中引用此行,但是能够在此行上放置标签(例如,在其侧面)会很好。

在这些示例中似乎正在执行的操作是将图表类型仅适合该系列修改为具有线子类型,没有标记的xy散点类型。

不幸的是,在xlsxwriter中,图表类型似乎只能针对每个图表设置,而不能针对每个系列设置(如示例中所示)

我已经探索了实现此目的的其他方法(例如使用.combine()合并两个图表),但是遇到了X轴引用不正确的问题。

我也知道y2_axis很有用,但是在这两者之间,我无法提出一种有效的组合。

任何帮助将不胜感激。我不能推荐足够的xlsxwriter,它对于我以前尝试使用它所做的一切都非常出色,并且即使在excel本身中也意识到这是一件不寻常的事情。

下面是我正在运行的代码的示例,它产生的内容非常接近我的需要。唯一的例外是,在单元格D16中,当我非常希望能够按原样引用X轴时,我使用的值是“ 600”(因此,使用大约0.0735而不是600可以得到相同的结果。坦白地说,我不确定为什么要显示600才行。

除此之外,我希望摆脱图例中对“ vlines”的引用,理想情况下,在该行的顶部具有“数据标签”。

y缩放不是必需的,但我认为该部分实际上很容易实现。

#!/bin/python3
import xlsxwriter
import os             #lets us execute shell commands in windows (to open the created excel document)

workbook = xlsxwriter.Workbook("test.xlsx")

interval=14.7

bins=12

wk_data =workbook.add_worksheet("Raw Data")
wk_chart =workbook.add_worksheet("Chart")

wk_data.write(0, 0, "Bin")
wk_data.write(0, 1, "Int")
wk_data.write(0, 2, "Sample")
wk_data.write(0, 2, "Thing1")
wk_data.write(0, 3, "Thing2")

wk_data.write(1, 2, 2)
wk_data.write(2, 2, 35)
wk_data.write(3, 2, 486)
wk_data.write(4, 2, 36)
wk_data.write(5, 2, 3)
wk_data.write(6, 2, 2)
wk_data.write(7, 2, 3)
wk_data.write(8, 2, 47)
wk_data.write(9, 2, 237)
wk_data.write(10, 2, 50)
wk_data.write(11, 2, 13)
wk_data.write(12, 2, 2)

wk_data.write(1, 3, 2)
wk_data.write(2, 3, 5)
wk_data.write(3, 3, 3)
wk_data.write(4, 3, 6)
wk_data.write(5, 3, 35)
wk_data.write(6, 3, 89)
wk_data.write(7, 3, 523)
wk_data.write(8, 3, 90)
wk_data.write(9, 3, 23)
wk_data.write(10, 3, 4)
wk_data.write(11, 3, 2)
wk_data.write(12, 3, 4)

wk_data.write(14, 2, 6)
wk_data.write(15, 2, 6)
wk_data.write(14, 3, 0)
wk_data.write(15, 3, 600)

for bin in range(0,bins):
    wk_data.write(bin+1, 0, bin) #Column with raw bin number
    wk_data.write(bin+1, 1, interval * bin / 1000) #Column with the x-values we are interested in

data_chart = workbook.add_chart({'type': 'line'})
vline_chart = workbook.add_chart({'type': 'scatter', 'subtype': 'straight'})

data_chart.add_series({
    'name':       "thing1",
    'categories': ['Raw Data', 1, 1, 12, 1],
    'values':     ['Raw Data', 1, 2, 12, 2],
    'line': {
        'width': 0.25,
    },
})

data_chart.add_series({
    'name':       "thing2",
    'categories': ['Raw Data', 1, 1, 12, 1],
    'values':     ['Raw Data', 1, 3, 12, 3],
    'line': {
        'width': 0.25,
    },
})

vline_chart.add_series({
    'name':       "vlines",
    'categories': ['Raw Data', 14, 2, 15, 2],
    'values':     ['Raw Data', 14, 3, 15, 3],

    'line': {
        'width': 4,
    }
    })

data_chart.combine(vline_chart)

data_chart.set_title ({'name': 'Turtles'})
data_chart.set_y_axis({'name': 'Count'})
data_chart.set_x_axis({'name': 'interval'})
data_chart.set_size({ 'width': 1500, 'height': 800})

wk_chart.insert_chart('A1', data_chart, {'x_offset': 0, 'y_offset': 0})

workbook.close()
os.system('"test.xlsx"')

1 个答案:

答案 0 :(得分:0)

要将散点图上的垂直参考线作为散点图添加到图表中,您只需要对我发布的代码进行一些细微的改动即可。

您需要从已发布的代码中进行的相关更改是将'y2_axis': True参数添加到vline_chart.add_series定义中,如下所示:

vline_chart.add_series({
    'name':       "vlines",
    'categories': ['Raw Data', 14, 2, 15, 2],
    'values':     ['Raw Data', 14, 3, 15, 3],
    **'y2_axis': True,**
    'line': {
        'width': 4,
    }
})

example文档中讨论了对y2_axis参数的需求以及一些here代码。