快速自动绘制 CSV 文件,并具有一定程度的艺术控制

机器算法验证 数据可视化 散点图
2022-04-09 14:07:14

假设我的 CSV 文件有时间和各种数据列与时间的关系。

我希望能够自动绘图。至少到一个文件;多种格式或屏幕也是一个加号。

会有很多情节。同一轴上的多个绘图,例如具有多列的电子表格散点图。非专业人士应该可以更改绘图命令。应该可以进行一些艺术控制,比如颜色、点、线或两者兼而有之,也许是符号。

这是我考虑过的:

OpenOffice 或 Excel 等电子表格:无法轻松实现自动化。擅长外观、艺术控制以及从 CSV 中选择列以进行绘图。自动化不好,而且需要时间来绘制。

R:易于将多列 csv 读取到数据框中,但生成所需的图并不那么容易。对单个时间序列很容易,但还没有看到任何简单的示例将多列数据绘制到相同的 X 和 Y 轴上,就像电子表格散点图那样。

Gnuplot:可能需要重新格式化数据。读取散点图的多列 CSV 不是那么直观。

还有其他我应该考虑的吗?

3个回答

Python 与MatplotLibPython 非常擅长处理 csv 文件。

但还没有看到任何简单的例子,可以像电子表格散点图那样将多列数据绘制到相同的 X 和 Y 轴上。

你探索过ggplot2吗?您可以使用 ggplot2 继续将系列添加到绘图中。它还具有非常好的刻面绘图功能。

正如@suncoolsu 所观察到的,主要是抽象数据操作的策略。首先为您打算生成的每个图表准备模板。这意味着定义:

  1. 图表数据
  2. 艺术细节

现在您需要将数据和艺术细节作为输入并以您喜欢的格式输出图形的程序(软件包)。

图表的数据可能与您在 csv 文件中的数据格式不同。因此,您需要从 csv 文件中读取数据并准备绘图的程序。

最后,您将需要一个协调上述过程的程序:数据准备和图表。

如果您使用基于 Unix 的系统,这种不同程序的组合是很常见的,因此数据操作和协调程序存在多种选择。所有脚本语言(bash、python、perl、ruby)都可以执行这些任务。要生成图形,您需要更专业的软件,例如 gnuplot,或专门的脚本语言库。虽然我提到了 Unix,但您也可以在 Windows 上执行这些操作。

您可以使用 C、C++、Java、.NET 或您喜欢的任何其他编程语言编写专用程序,而不是脚本语言。这实际上取决于您喜欢在哪种环境中工作。您还可以在 Excel 中使用 Visual Basic 或 VB 宏。

我自己会在 R 中做所有事情,因为它可以执行我提到的所有三个任务。我经常需要阅读 csv 文件,进行分析和绘图。由于我通常处理多个国家/地区的数据,因此我必须为每个国家/地区制作一个图表。R让我很容易做到这一点。此外,R 图表非常可定制(请参阅R 项目主页上的图表),当您拥有图表时,您几乎可以生成任何您喜欢的格式,请参阅?device.

即使在 R 中,您也可以通过不同的方式完成上述任务。例如,您可以仅使用基本包,或使用foreachplyrreshape等包进行自动化和数据操作。对于绘图,您可以使用基本 R 图形、晶格或ggplot2

我出于同样的目的使用 matplotlib。这是我的python代码:

#!/home/user/miniconda2/bin/python
import sys
import csv
import numpy as np
import matplotlib.pyplot as plt
#plt.style.use('stylesheet')

if len(sys.argv) != 2:
    print "Single argument Expected"
    sys.exit(2)
f = str(sys.argv[1])

with open(f) as f1:
    reader = csv.reader(f1, delimiter=',')
    first_row = next(reader)

data = np.genfromtxt(f, delimiter=",", skip_header=1)
for col in range(1,len(first_row)):
    plt.plot(data[:,0],data[:,col],label=first_row[col],lw=2)

plt.title(f[:-4])
plt.xlabel(first_row[0])
#plt.ylabel(first_row[1])
plt.legend(loc=0)
#plt.show()
plt.savefig(f[:-4]+".pdf")
print "Done! Saved image to "+f[:-4]+".pdf"

通过matplotlib 文档了解如何更改绘图样式和其他属性。我个人使用样式表