【问题标题】:Bashscript with Gnuplot on .csv File.csv 文件上带有 Gnuplot 的 Bash 脚本
【发布时间】:2022-01-19 16:57:28
【问题描述】:

我想编写一个小 bash 脚本,它只是要求用户输入国家和项目。 该脚本将打开 gnuplot 并从 .csv 和安全的 .png 中绘制一些数据(国家和项目的订单日期和总利润)

这些是前几行(总共 100k):

Country,Item Type,Order Date,Total Profit
Afghanistan,Baby Food,1/10/2010,672649.62
Afghanistan,Baby Food,1/23/2010,833406.84
Afghanistan,Baby Food,10/14/2011,893894.50
Afghanistan,Baby Food,10/20/2013,38919.16
Afghanistan,Baby Food,11/10/2015,51189.24
Afghanistan,Baby Food,11/19/2014,471247.76

我在 gnuplot 终端中的输入:

set title 'sales'
set xlabel 'date'
set ylabel 'profit'
set datafile separator ','
set xdata time
set timefmt "%m/%d/%y"
plot 100k.csv u 3:4 w lines

如果我在 Gnuplot 终端中使用本手册,它会绘制想要的数据。问题是它没有忽略“标题”(国家、项目类型、订单日期、总利润)

【问题讨论】:

  • 你能告诉我们你的剧本吗?从我的立场很难看懂:)
  • 你的文件名是什么?将您的文件名放在单引号中。试试plot '100k.csv' u 3:4 w lines
  • @Jacques Gaudin 我现在没有任何脚本。我想在编写脚本之前手动绘制它。
  • @theozh 我已经试过了,谢谢 :)
  • grep -q \" youfile.csv && echo quoted 输出 quoted?

标签: bash csv plot gnuplot script


【解决方案1】:

我不清楚您是在寻找 bash 脚本还是 gnuplot 脚本,可能两者兼而有之。 我的理解是你想从命令行调用来生成一些图。 因此,您需要从 CSV 文件中过滤数据并生成绘图并将其保存到磁盘。

根据以下建议,您可以通过以下方式从命令行调用 gnuplot:

gnuplot -c "SO70774684.gp" "Afghanistan" "Baby Food"

gnuplot 正在为您做所有事情,即过滤和生成 PNG 图。

我假设条目是按日期排序的,否则线图没有太大意义,或者需要先对数据进行排序。 您没有指定太多细节,因此有很大的调整空间。

数据: 'SO70774684.csv' 添加了更多行。

Country,     Item Type, Order Date, Total Profit
Afghanistan, Baby Food,  1/10/2010, 672649.62
Belgium,     Baby Food,  1/10/2010, 1111
Afghanistan, Baby Food,  1/23/2010, 833406.84
Cyprus,      Baby Food,  1/23/2010, 2222
Afghanistan, Baby Food, 10/14/2011, 893894.50
Denmark,     Baby Food, 10/14/2011, 3333
Afghanistan, Baby Food, 10/20/2013, 38919.16
Estonia,     Baby Food, 10/14/2011, 4444
Afghanistan, Baby Food, 11/19/2014, 471247.76
France,      Baby Food, 10/14/2011, 5555
Afghanistan, Baby Food, 11/10/2015, 51189.24
Germany,     Baby Food, 10/14/2011, 6666
Belgium,     Baby Food,  1/10/2010, 1000
Cyprus,      Baby Food,  1/23/2010, 2000
Denmark,     Baby Food, 10/14/2011, 3000
Estonia,     Baby Food, 10/14/2011, 4000
France,      Baby Food, 10/14/2011, 5000
Germany,     Baby Food, 10/14/2011, 6000

代码:(gnuplot 脚本文件'SO70774684.gp'

### create gnuplot graph from command line call
reset session

FILE    = 'SO70774684.csv'
Country = ARG1
Item    = ARG2

set datafile separator comma
set xdata time
set timefmt "%m/%d/%Y"

set term pngcairo size 640,384 font ",10"
set output sprintf("%s,%s.png",Country,Item)

set ylabel "Total profit" font ",11"
set format x "%m\n%Y"
set boxwidth 1.0 relative
set style fill solid 0.3
set key noautotitle
set grid x,y

set title sprintf("%s: %s", Country, Item)

myFilter(colD,colF1,F1,colF2,F2) = strcol(colF1) eq F1 && strcol(colF2) eq F2 ? column(colD) : NaN
set datafile missing NaN

plot FILE u 3:(myFilter(4,1,Country,2,Item)) w lp pt 7 lc "red"

set output
### end of code

结果:(文件:'Afghanistan,Baby Food.png'

【讨论】:

  • 如果我在脚本上使用 Gnuplot,它会告诉我“第 1 行:警告可选轴名称”和“第 1 行:';'预计如果我删除重置会话行,它会给我一个错误,我的变量没有声明
  • @Thomas 哪个操作系统,哪个 gnuplot 版本?如何从 gnuplot 控制台或系统命令行启动脚本?当前工作目录是什么,gnuplot 和数据在哪里?
  • 我正在使用带有 Gnuplot 4.6 的 Ubuntu。我直接从终端启动脚本。工作目录和数据(脚本和 .csv)是同一个目录。 Gnuplot 目录不同。当我在终端上打开 Gnuplot 并放置几个命令(我写在帖子顶部)然后它可以工作并绘制数据,但前提是我删除“标题”(国家、项目类型、订单日期、总利润)
  • @Thomas 哎呀,gnuplot 4.6?哪个版本 4.6.0 或 4.6.5?为什么是 10 年前的版本?我们现在是 5.4 版。那么,如果您在 Ubuntu 命令行中键入 gnuplot -c "SO70774684.gp" "Afghanistan" "Baby Food",又会发生什么。或者,如果您在 gnuplot 命令行中工作,请将带有 ARG1ARG2 的两行更改为 Country = "Afghanistan"Item = "Baby Food",然后使用 load "SO70774684.gp" 启动您的脚本。很难远程猜测您实际在做什么。
  • gyazo.com/54f18328cdd13b7b33aed04180c9c22a 这就是我想要做的。如果我删除“重置会话”行,它会给我错误:“myscript.sh”,第 1 行:未定义变量 ARG1”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多