如何在 Excel 中创建包含多个系列(1000)的图表?

如何在 Excel 中创建包含多个系列(1000)的图表?

我有一张包含 1000 行的 Excel 工作表,每行包含 100 列,列中的数字按从小到大从左到右的顺序排列(这些都是发生某事的日期或年份)。我想为这些日期创建一个序数索引,按 1-100 绘制每列。

下图显示了我感兴趣的图表示例。在这里,我只绘制了 1000 行中的 2 行,但这实际上是我想对整个数据集执行的操作。散点图示例

这里还有一个 Excel 电子表格的屏幕截图链接。因此,本质上,我正在寻找一种更快的方法来绘制 1-1000 行与 1001 行的对应关系。电子表格示例

有没有比创建 1000 个系列并选择 1000 次数据更快的方法在 Excel 中执行此操作?或者是否有其他程序可以执行此操作?我觉得 r 很有用,但我对那个程序没有任何经验。

答案1

是的,有更快的方法。您可以使用宏以编程方式创建绘图。

如果您了解 VB,请跳至步骤 3。

  1. 打开 Visual Basic 窗口 - 通过“开发人员”选项卡或 Alt-F11。
  2. 左上角是工作簿工作表和模块的列表。找到工作簿的名称,右键单击其名称,然后选择“插入 > 模块”。在文件树中现在应该有一个名为 Modules 的文件夹,其中有一个名为“Module1”的元素。双击它。
  3. 您现在位于 Excel VB 模块中。添加以下代码:

    Sub chart()
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.Legend.Delete
    i = 1
    numSeries = 1000
    Do While i < numSeries + 1
      ActiveChart.SeriesCollection.NewSeries
      ActiveChart.SeriesCollection(i).XValues = "=Sheet1!$A$" & i & ":$CV$" & i
      ActiveChart.SeriesCollection(i).Values = "=Sheet1!$A$" & numSeries + 1 & ":$CV$" & numSeries + 1
      i = i + 1
    Loop
    End Sub
    
  4. 运行代码,可以使用 Visual Basic 窗口中的运行按钮或菜单,也可以通过 Excel 中的“开发人员”选项卡。

  5. 您可以在代码中看到列名 $A 和 $CV。如果结果由于某种原因与您的数据不匹配,请更改这些。如果您以后想要不同的行数,可以更改变量 numSeries。此代码假设您没有标题行,并且 X 轴数据位于最后一行,这是一种不常见的存储图表数据的方式,但与您的示例相匹配。

编辑:X 和 Y 切换:

Sub chart()
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatter
ActiveChart.Legend.Delete
i = 1
numSeries = 1000
Do While i < numSeries + 1
  ActiveChart.SeriesCollection.NewSeries
  ActiveChart.SeriesCollection(i).Values = "=Sheet1!$A$" & i & ":$CV$" & i
  ActiveChart.SeriesCollection(i).XValues = "=Sheet1!$A$" & numSeries + 1 & ":$CV$" & numSeries + 1
  i = i + 1
Loop
End Sub

现在尝试通过让每个系列显示 4 个数据集来获取 255 个限制以下的 1000 个项目:

Sub chart()
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatter
ActiveChart.Legend.Delete
i = 1
numSeries = 1000

s0 = "Sheet1!$A$" & numSeries + 1 & ":$CV$" & numSeries + 1


Do While i < (numSeries / 4 + 1)
  s1 = "=Sheet1!$A$" & i & ":$CV$" & i
  s2 = ", Sheet1!$A$" & i + numSeries / 4 & ":$CV$" & i + numSeries / 4
  s3 = ", Sheet1!$A$" & i + 2 * numSeries / 4 & ":$CV$" & i + 2 * numSeries / 4
  s4 = ", Sheet1!$A$" & i + 3 * numSeries / 4 & ":$CV$" & i + 3 * numSeries / 4


  ActiveChart.SeriesCollection.NewSeries
  ActiveChart.SeriesCollection(i).Values = s1 & s2 & s3 & s4
  ActiveChart.SeriesCollection(i).XValues = "=" & s0 & ", " & s0 & ", " & s0 & ", " & s0
  i = i + 1
Loop
End Sub

相关内容