1

我有许多数值数据集,我已经计算了平均值、中位数、偏差、最小值和最大值,我想将它们可视化(在 Linux 上,没有 X,到图像文件)。

我已经看到了 gnuplot 绘制误差线的功能,但我有几个问题:我的数据集沿 X 轴非常紧密地打包在一起,而 gnuplot 的误差线在 X 轴上占用了太多空间;而且我只看到它能够绘制最小值和最大值以及介于两者之间的数据点(大概是平均值),并且我看不到将中值和偏差拟合到该模型中的好方法。

有谁知道在 gnuplot 中解决这些问题的方法?或者,有没有比 gnuplot 更好的程序?

4

4 回答 4

1

我使用 R 的lattice包来绘制统计数据。

您可以查看R Graph Gallery以获取呈现误差线(“置信区间”)的示例脚本。

您不需要 X 来显示图表。在打印之前将点阵图函数包装在postscript设备中:

mtxf.ps <- "myBarchart.ps"
postscript(mtxf.ps,
           width = 6,
           height = 4,
           paper = 'special',
           horizontal = F)
mtx.p <- barchart(...) 
print(mtx.p)
dev.off()

该代码片段将 打印barchart到 PostScript 文件中,您可以使用 Imagemagick 将其转换为 PNG 或其他格式:

$ convert -density 200 myBarchart.ps myBarchart.png

R 是一种有点奇怪的语言,但一旦你弄清楚它的怪癖,它就会很有表现力。这是一很好的 R 入门书,也是一本关于如何lattice在不同场景中使用的很好的书。

于 2010-11-14T08:39:01.980 回答
1

我认为您不应该将中位数和平均值放在同一个图中,因为它们根本不同。

显示中位数统计数据的标准方法是“盒须图”,它显示最小值、第一四分位数、中位数、第三四分位数和最大值。为了在 gnuplot 中实现这一点,您必须使用 multiplot 进行多次传递:

set multiplot
set style fill empty
set boxwidth 0.4
plot "data" using 1:3:2:6:5 with candlesticks lt -1 lw 5 notitle,\
     '' using 1:4:4:4:4 with candlesticks lt -1 lw 10 notitle
set boxwidth 0.3
plot "data" using 1:2:2:2:2 with candlesticks lt -1 lw 5 notitle,\
     '' using 1:6:6:6:6 with candlesticks lt -1 lw 5 notitle

这假设您的“数据”文件具有 x 值、最小值、第一个四分位数、中位数、第三个四分位数、最大值的列。当然,您可以使用 boxwidths、线型 ( lt) 和线宽 ( lw) 来获得您需要的东西。

如果你想用标准差取平均值,你可以使用标准误差条;我相信你可以使用boxwidth误差条来调整大小。

要设置输出类型,请使用set terminal. 我建议使用矢量格式以避免像素化。help set terminal您可以在 gnuplot 提示符下查看安装中可用的终端。此外,butt如果可用,请使用该选项(防止线路“过冲”)。

于 2010-11-14T10:13:11.343 回答
0

除了 Svante 的回答,您还可以使用

set bars small 

删除错误栏中的“x-part”。例如,

#!/bin/bash
echo "1 2 2.0 2.4
2 4 3.9 4.5
3 1.4 0.1 1.5
4 2.9 2.2 4" > "data.dat"
gnuplot<<EOF
set term png small; set output "data.png"
set xrange [0:5]; set yrange [0:5]
set bars small
plot "./data.dat" using 1:2:3:4 with errorbars
set output ; set term pop
EOF

汤姆

于 2010-11-15T16:04:01.370 回答
0

你可以看看MathGL——它是 GPL 绘图库,可以在控制台中绘图(不需要 X)。并且它具有比 gnuplot 更多的图形类型(包括用于 2 和 3 范围数据的图形类型)。

于 2011-06-08T05:28:52.117 回答