在 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
结果:
我正在研究 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
结果: