1

我用谷歌搜索了一下,但找不到一个好的解决方案。我有一系列事件:A、B 和 C 随着时间的推移反复发生,我想在时间线上将其绘制如下:

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

但以更美观和多彩的方式。我使用 gnuplot,所以,如果有人知道 gnuplot 的诀窍,那就太好了。

原始数据格式如下:

A   4
B   6
C  10
A  14
B  17
C  22
A  27
B  27
C  35
A  35

我制定的gnuplot脚本如下:

set terminal png enhanced
set style data histograms

set style histogram columnstacked
set output "timeline.png"
set xlabel "events"
set ylabel "min"
set auto x
set xtics 1
set key top left
set boxwidth 0.5 relative
set style fill solid 0.6 border -1
plot 'timeline.txt' using 2 t "execution"

在上述数据上运行此脚本后,我得到以下图: 列堆叠直方图

我想要:1)根据第一列上的字母重复的颜色和 2)直方图是水平的一维图。

谢谢你的帮助。

4

1 回答 1

2

像这样的东西怎么样:

sum=0
cum_sum(x)=(sum=sum+x,sum-x/2)
set yrange [-1:2]
set xrange [0:*]
unset ytics
set style fill solid
plot 'test.dat' using (cum_sum($2)):(1.0):($2):($0) w boxes t "execution" lc variable

这是一个根据标签为框着色的版本(我不得不承认,我为这个 hack 感到非常自豪):

sum=0
cum_sum(x)=(sum=sum+x,sum-x/2)
set yrange [-1:2]
set xrange [0:*]
unset ytics
set style fill solid
LABELS="ABCD"
plot 'test.dat' using (cum_sum($2)):(1.0):($2):(strstrt(LABELS,strcol(1))) w boxes t "execution" lc variable

如果您想控制特定标签的颜色,您需要使用从字符串set style line X lc rgb 'cyan'索引开始的标签X的颜色。LABELScyan

于 2012-11-07T04:53:43.223 回答