图表中的垂直参考线

2024-04-23 14:55:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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散点类型,其子类型为line,没有标记。你知道吗

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

我已经探索了实现这一点的其他方法(例如使用.combine()组合两个图表),但是遇到了X轴被不正确引用的问题。你知道吗

我也知道y2èu轴是有用的,但在这两者之间,我还没有找到一个有效的组合。你知道吗

任何帮助都将不胜感激。我对xlsxwriter的推荐再多不过了——它对我用它做的每件事都非常好,而且我认识到,即使在excel本身中,这也是一件不寻常的事情。你知道吗

下面是我正在运行的代码的一个例子,它产生了一些非常接近我需要的东西。例外情况是,在单元格D16中,当我真的希望能够引用X轴时,我使用的值是“600”(因此,通过使用大约0.0735而不是600来获得相同的结果)。坦率地说,我不知道为什么600是什么需要使线出现在那里。你知道吗

除此之外,我希望去掉图例中对“vlines”的引用,理想情况下,在该行的顶部有一个“data label”。你知道吗

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"')

Tags: nameinadddatarawbinlinechart
1条回答
网友
1楼 · 发布于 2024-04-23 14:55:56

要将垂直参考线作为散点添加到辅助轴上的图表中,您只需要对发布的代码做一点小的更改,这是我在对不同文档页面进行大量研究后发现的。你知道吗

您需要对发布的代码进行的相关更改是将'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,
    }
})

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

相关问题 更多 >