在Excel中绘制间隔图表

是否有可能在Excel中绘制这样的图表? 怎么样? 在这里输入图像说明

这是一个有趣的。 我不知道是否有一个很好的方法来扩展Excel中现有的盒子和图表的function,但幸运的是,我能够想出一个快速和肮脏的方式来伪造一个散点图。 基本上,我们只是沿着间隔进行迭代,并select足够的点来显示在散点图上,看起来与盒子和胡须不可区分。 因为它使每个间隔都有不同的系列,所以您还可以将着色等格式化为更容易的区分它们。

以下是我的一些数据的最终结果(您可以修改底层散点图使用的标记来更改线条粗细等):

区间图示例

该代码正在寻找一个格式化的表,每个系列的名称和每个维度的最小/最大值单独列。 以下是input表的格式:

间隔表

最后,这里是我运行生成它的macros:

' Build and display an "Interval Chart" Public Sub MakeIntervalChart() Dim inRow As Long, outRow As Long, lastRow As Long, startRow As Long Dim interX As Double, interY As Double, intervalAmt As Double intervalAmt = 0.01 ' CHANGE ME ' Source / Destination Worksheet Parameters (CHANGE ME) Dim wsSource As Worksheet, wsDest As Worksheet Set wsSource = Worksheets("Data") Set wsDest = Worksheets.Add() wsDest.Name = "IntervalChart" ' Create output chart Dim boxChart As Chart Set boxChart = wsDest.Shapes.AddChart2(240, xlXYScatter).Chart boxChart.HasLegend = True outRow = 1 lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row For inRow = 2 To lastRow ' Retrieve current interval (CHANGE ME) Dim seriesName As String Dim minX As Double, maxX As Double, minY As Double, maxY As Double seriesName = wsSource.Cells(inRow, 1) minX = wsSource.Cells(inRow, 2) maxX = wsSource.Cells(inRow, 3) minY = wsSource.Cells(inRow, 4) maxY = wsSource.Cells(inRow, 5) startRow = outRow 'intervalAmt = (maxX - minX) / 50.0 ' Top and Bottom of box For interX = minX To maxX Step intervalAmt wsDest.Cells(outRow, 1) = seriesName wsDest.Cells(outRow, 2) = interX wsDest.Cells(outRow, 3) = minY outRow = outRow + 1 wsDest.Cells(outRow, 1) = seriesName wsDest.Cells(outRow, 2) = interX wsDest.Cells(outRow, 3) = maxY outRow = outRow + 1 Next 'intervalAmt = (maxY - minY) / 50.0 ' Left and Right of box For interY = minY To maxY Step intervalAmt wsDest.Cells(outRow, 1) = seriesName wsDest.Cells(outRow, 2) = minX wsDest.Cells(outRow, 3) = interY outRow = outRow + 1 wsDest.Cells(outRow, 1) = seriesName wsDest.Cells(outRow, 2) = maxX wsDest.Cells(outRow, 3) = interY outRow = outRow + 1 Next ' Add new series (box) With boxChart.SeriesCollection.newSeries() .Name = seriesName .XValues = wsDest.Range("B" & startRow & ":B" & outRow - 1) .Values = wsDest.Range("C" & startRow & ":C" & outRow - 1) End With Next End Sub 

您将需要更改input/输出表名称和input表格的预期格式(假设您不想被格式卡住)。 您还需要调整数据的0.01参数。 我把它放在一个非常小的时间间隔,你可以使用你的样本数据。 您可以根据您的需要将此增量值调整为0.01以外的值,也可以使用注释行中的代码intervalAmt = (maxX - minX) / 50.0并调整50.0值(这将是标记的数目绘制每个部分的框)。 小心调整这些值 – 你可能会很容易地浪费大量的时间来产生比你需要的更多的标记,以达到一条直线。

JavaScript有像Highcharts和D3这样强大的库来绘制graphics,Funfun可以在Excel中编写JavaScript代码。 在网站上用Highcharts试试这个解决scheme,告诉我是不是你想要的:

https://www.funfun.io/1/edit/59f9d122ff5aa66c5ca8b9ee

一旦您对解决scheme感到满意,您可以通过相同的链接直接将其加载到您的Excel中,这要感谢Funfun Excel加载项 。 这里是截图:

在这里输入图像说明

在这里输入图像说明

当然,您可以根据需要在Excel中编辑数据和代码:

在这里输入图像说明