在linux中绘制图形

时间:2012-09-16 04:58:44

标签: shell graph gnuplot gnu

我有一个文件,其中包含两个实体之间的映射。我必须使用linux在图表中绘制x和Y轴。 X轴是时间(12:35:07),Y轴将有一些整数范围(1-14)。我需要使用一些应该从linux shell脚本调用的方法绘制x和Y轴。 X轴将有大约500到800个样本。说(从12:14:00到12:30:00)。任何人都可以帮助我。我尝试使用GNUplot,但图表不合适。样本输入如下:

12:34:58   5
12:35:06   9
12:35:07   14
12:35:07   13
12:35:08   4
12:35:08   5
12:35:17   9
12:35:17   13
12:35:18   14
12:35:19   4
12:35:19   5

这就是我写的

1 set terminal png
2 set output 'test.png'
3 set xdata time
4 set timefmt "%H:%M:%S"
5 set yrange [1:15]
6 plot  "Graph1" using 1:2 title 'data A'

我遇到的问题是因为图像有大量样本(大约700个区间,我无法正确看到每个值。而且Y轴也不合适。我需要将Y轴限制为仅10个值(1-10)。此外,我需要绘制4个相似的图形并将每个图形放在每个角落(子图)。我还没有在GNUplot中完成子图。

1 个答案:

答案 0 :(得分:1)

现在看来你有三个主要问题。对于他们中的一些人来说,这个问题并不完全清楚,所以如果你能够更新你的问题(或发表评论)来澄清它会有所帮助,我可以更新我的回复。

1)无法正确查看〜700个值中的每一个。

我需要澄清一下。我假设您不希望单独看到每个700个数据点,而是希望能够摆脱x轴上的混乱,这在绘制时间值时会发生。为此,您可以使用命令

set xtics X

其中X是您想要的抽搐之间的间隔,在这种情况下是几秒钟。这是你想要的吗?

您也可以使用

set format x '%M:%S'

(或其他)如果你想控制x值在轴上的显示方式。

2)y轴需要限制为10个值。

这里也不完全清楚你在寻找什么。你想把所有东西缩小到1到10之间吗?您呈现的数据范围是4到14,因此通过减去4,您可以得到0到10之间的数据:

plot  "Graph1" using 1:($2-4) title 'data A'

如果你想将任意y数据集限制在1到10之间,那就更棘手了:

stats "Graph1"
plot "Graph1" using 1:(($2-STATS_min_y)*9/(STATS_max_y-STATS_min_y)+1) title 'data A'

stats命令在绘制文件之前获取有关文件的统计信息。复杂的绘图命令应该在y轴上将所有内容缩放到1到10之间。

3)您想要有4个子图。

这个很容易。在第一个绘图命令之前,使用命令

set multiplot layout 2,2

这将为您的图创建一个2x2网格。每个绘图命令都将绘制在一个新的子图上。在gnuplot命令行输入help set multiplot,以获取有关更改所用子图序列的详细信息。