You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Linux终端基于Excel表格生成Gnuplot图表?

能否在Linux终端基于Excel表格生成Gnuplot?

可以实现,但Gnuplot本身不直接支持读取.xls/.xlsx格式的Excel文件,需要先把Excel数据转换成Gnuplot兼容的文本格式(如CSV、TSV),再用Gnuplot绘图。以下是具体步骤和工具:

1. 将Excel文件转成文本格式

Linux终端下有多个工具可以完成这个转换,推荐几个常用的:

用ssconvert(Gnumeric套件)

Gnumeric是Linux下的电子表格工具,其附带的ssconvert命令支持批量转换Excel文件:

  • 先安装Gnumeric:
    Debian/Ubuntu:sudo apt install gnumeric
    RHEL/CentOS:sudo yum install gnumeric
  • 转换命令:
    ssconvert input.xlsx output.csv  # 转成CSV格式
    ssconvert input.xlsx output.tsv  # 转成TSV格式
    

用xlsx2csv

这是一个轻量的Python工具,专门处理xlsx转CSV:

  • 安装:pip install xlsx2csv
  • 转换命令:
    xlsx2csv input.xlsx output.csv  # 转CSV
    xlsx2csv input.xlsx output.tsv -t  # 转TSV(制表符分隔)
    

用LibreOffice命令行模式

如果系统已装LibreOffice,可以用无头模式转换:

libreoffice --headless --convert-to csv input.xlsx

转换后的CSV文件会和原Excel文件在同一目录下。

2. 用Gnuplot绘制图形

转换完成后,就可以用Gnuplot读取生成的文本文件绘图。举个简单例子:

  • 打开Gnuplot终端:gnuplot
  • 执行绘图命令(假设是CSV文件,逗号分隔):
    set datafile separator ','  # 指定分隔符,TSV用'\t'
    plot 'output.csv' using 1:2 with linespoints title 'Excel Data Plot'
    set terminal png
    set output 'plot.png'
    replot  # 导出为PNG图片
    

3. 自动化流程(可选)

可以写一个shell脚本把转换和绘图整合在一起,比如:

#!/bin/bash
if [ $# -ne 1 ]; then
    echo "Usage: $0 <input-excel-file>"
    exit 1
fi

# 转换Excel到临时CSV
ssconvert "$1" temp.csv

# Gnuplot绘图并导出为PNG
gnuplot -e "
set datafile separator ',';
set terminal png size 800,600;
set output 'excel_plot.png';
plot 'temp.csv' using 1:2 with lines title 'Data from Excel';
"

# 清理临时文件
rm temp.csv
echo "Plot saved as excel_plot.png"

给脚本加执行权限:chmod +x excel2gnuplot.sh,然后运行:./excel2gnuplot.sh input.xlsx

注意事项

  • Excel中的合并单元格、空值、非数值内容可能会导致转换后的数据异常,建议提前在Excel中整理好数据(比如拆分合并单元格、填充空值)。
  • 如果Excel有多个工作表,ssconvert和xlsx2csv可以指定工作表,比如xlsx2csv input.xlsx --sheet 2 output.csv(读取第2个工作表)。

内容的提问来源于stack exchange,提问作者Muhammad Awais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:35:06