在 gnuplot 上重新绘制 Excel 个图形

Redrawing Excel figures on gnuplot

我正在研究 excel 并绘制了如下所示的两个直方图,有人告诉我在 windows 上使用 gnuplot 重新绘制它们,这对我来说很新。
我要重绘的原图是这个

                     Area 1             Area 2 
               Case 1    Case 2   Case 1  Case 2 
Parameter 1     36         66      31      72
Parameter 2     57         91      44      85
Parameter 3     62         90      50      85

我的文件是一个文本文件,我写了上面的 table 如下,因为我不确定如何将不同的列组合在一起。

Area    Area1 Area1 Area2 Area2
Case  Case1 Case2   Case1   Case2
Parameter_1 36  66  31  72
Parameter_2 57  91  44  85
Parameter_3 62  90  50  85

我使用了以下命令并得到了一个以错误方式分组的直方图。

clear
reset
unset key
set style data histogram
set style fill solid border
set style histogram clustered
plot for [COL=2:5] 'date_mins.tsv' using COL:xticlabels(1) title columnheader

请指导我如何将列组合在一起,以及如何在条形顶部添加数字。 {图表应与 excel 生成的图表相同。}

老实说,我经常对 gnuplot 中的直方图感到困惑,显然我不是唯一一个。在 gnuplot 控制台中,检查 help histograms。 虽然,gnuplot homepage 上有一些直方图示例,但当然不能涵盖所有可能的变化。 显然,这种绘图风格有点难以理解。 这也许可以解释在使用 gnuplot 的直方图上有超过 800 个关于 SO 的问题。

我不确定你是否或如何有效地得到你想要的直方图,也许有一个简单的方法。 我会用绘图风格 with boxes “手动”完成。 检查下面的示例作为起点。包括一些奇怪的解决方法,例如将标题放入较早情节中的数组以供以后使用。

代码:

### special histogram
reset session

$Data <<EOD
Area           Area1  Area1   Area2  Area2
Case           Case1  Case2   Case1  Case2
"Parameter 1"  36     66      31     72
"Parameter 2"  57     91      44     85
"Parameter 3"  62     90      50     85
EOD

set style fill solid noborder
set boxwidth 0.8
set key noautotitle out center bottom horizontal reverse Left samplen 1 width 2

A=2   # Areas
C=2   # Cases
P=3   # Parameters
g=1   # gap

PosX(a,c,p)   = ((a-1)*C*(P+g)) + (c-1)*(P+g) + p
PosY(a,c)     = column((a-1)*C+c+1)
PosXArea(a)   = (PosX(a,C,P)+PosX(a-1,C,P))*0.5
PosXCase(a,c) = (PosX(a,c,P)+PosX(a,c-1,P))*0.5
myColor(p)    = int(word("0x5b9bd5 0xed7d31 0xa5a5a5",int(p)))
myValue(a,c)  = strcol((a-1)*C+c+1)

set grid y
set xlabel "\n\n\n"     # get empty space below the plot
set format x ""         # no xtic labels 
set yrange[0:]
array Titles[P]         # array for titles

plot for [a=1:A] for [c=1:C] $Data u (PosX(a,c,[=10=])):(PosY(a,c)):(myColor([=10=]+1)) skip 2 w boxes lc rgb var , \
     for [a=1:A] for [c=1:C]    '' u (PosX(a,c,[=10=])):(PosY(a,c)):(Titles[int([=10=]+1)]=strcol(1), myValue(a,c)) skip 2 w labels offset 0,0.7, \
     for [a=1:A] for [c=1:C]    '' u (PosXCase(a,c)):(0):(myValue(a,c)) every ::1::1 w labels offset 0,-1, \
     for [a=1:A]                '' u (PosXArea(a)):(0):('\n\n'.myValue(a,1)) every ::0::0 w labels offset 0,-1, \
     for [p=1:P] keyentry w boxes lc rgb myColor(p) ti Titles[p]
### end of code

结果: