如何通过 gnuplot 绘制分组箱线图
How to plot grouped boxplot by gnuplot
我想知道如何使用 gnuplot 绘制此图:
我有两个问题:
- ytic 是 ..., 10^2, 10^1, 10^2, 10^3, ... 如何处理这样的
案例?
- 我知道 gnuplot 支持箱线图,但如何重组箱线图
根据一些标签?
由于没有图的原始数据,我自己补了一些数据。
有A、B、C两家公司,以四种价格销售不同的水果。
A公司苹果价格:1.2 1.3 1.4 1.1
A公司香蕉价格:2.2 2.1 2.4 2.5
A公司橙价:3.1 3.3 3.4 3.5
B公司苹果价格:1.2 1.3 1.4 1.1
B公司香蕉价格:2.2 2.1 2.4 2.5
B公司橙价:3.1 3.3 3.4 3.5
C公司苹果价格:2.2 1.3 1.4 2.1
C公司香蕉价格:3.2 3.1 3.4 2.5
C公司橙价:2.1 3.3 1.4 2.5
我想知道如何用 gnuplot 绘制这些数字。
你的问题不是很详细,也缺少你自己的编码尝试,因此存在很大的不确定性。我想没有简单的单一命令来获取分组的箱线图。
肯定有几种方法可以实现您的图表,例如multiplot
.
以下示例的假设是所有文件的数据都按列组织,并且列数相同,水果相同,顺序相同。否则必须修改代码。这完全取决于您想要的“自动化”程度。可以通过无头箭头绘制垂直分隔线(检查 help arrow
)。
因此,请参阅以下示例作为起点。
数据:
'Company A.dat'
Apples Bananas Oranges
1.2 2.2 3.1
1.3 2.1 3.3
1.4 2.4 3.4
1.1 2.5 3.5
'Company B.dat'
Apples Bananas Oranges
1.2 2.2 3.1
1.3 2.1 3.3
1.4 2.4 3.4
1.1 2.5 3.5
'Company C.dat'
Apples Bananas Oranges
2.2 3.2 2.1
1.3 3.1 3.3
1.4 3.4 1.4
2.1 2.5 2.5
代码:
### grouped boxplots
reset session
FILES = 'A B C'
File(n) = sprintf("Company %s.dat",word(FILES,n))
myXtic(n) = sprintf("Company %s",word(FILES,n))
set xlabel "Fruit prices"
set ylabel "Price"
set yrange [0:5]
set grid y
set key noautotitle
set style fill solid 0.3
N = words(FILES) # number of files
COLS = 3 # number of columns in file
PosX = 0 # x-position of boxplot
plot for [n=1:N] for [COL=1:COLS] PosX=PosX+1 File(n) u (PosX):COL w boxplot lc COL, \
for [COL=1:COLS] File(1) u (NaN):COL w boxes lc COL ti columnhead, \
for [n=1:N] File(1) u ((n-1)*COLS+COLS/2+1):(NaN):xtic(myXtic(n))
### end of code
结果:
我想知道如何使用 gnuplot 绘制此图:
我有两个问题:
- ytic 是 ..., 10^2, 10^1, 10^2, 10^3, ... 如何处理这样的 案例?
- 我知道 gnuplot 支持箱线图,但如何重组箱线图 根据一些标签?
由于没有图的原始数据,我自己补了一些数据。
有A、B、C两家公司,以四种价格销售不同的水果。
A公司苹果价格:1.2 1.3 1.4 1.1
A公司香蕉价格:2.2 2.1 2.4 2.5
A公司橙价:3.1 3.3 3.4 3.5
B公司苹果价格:1.2 1.3 1.4 1.1
B公司香蕉价格:2.2 2.1 2.4 2.5
B公司橙价:3.1 3.3 3.4 3.5
C公司苹果价格:2.2 1.3 1.4 2.1
C公司香蕉价格:3.2 3.1 3.4 2.5
C公司橙价:2.1 3.3 1.4 2.5
我想知道如何用 gnuplot 绘制这些数字。
你的问题不是很详细,也缺少你自己的编码尝试,因此存在很大的不确定性。我想没有简单的单一命令来获取分组的箱线图。
肯定有几种方法可以实现您的图表,例如multiplot
.
以下示例的假设是所有文件的数据都按列组织,并且列数相同,水果相同,顺序相同。否则必须修改代码。这完全取决于您想要的“自动化”程度。可以通过无头箭头绘制垂直分隔线(检查 help arrow
)。
因此,请参阅以下示例作为起点。
数据:
'Company A.dat'
Apples Bananas Oranges
1.2 2.2 3.1
1.3 2.1 3.3
1.4 2.4 3.4
1.1 2.5 3.5
'Company B.dat'
Apples Bananas Oranges
1.2 2.2 3.1
1.3 2.1 3.3
1.4 2.4 3.4
1.1 2.5 3.5
'Company C.dat'
Apples Bananas Oranges
2.2 3.2 2.1
1.3 3.1 3.3
1.4 3.4 1.4
2.1 2.5 2.5
代码:
### grouped boxplots
reset session
FILES = 'A B C'
File(n) = sprintf("Company %s.dat",word(FILES,n))
myXtic(n) = sprintf("Company %s",word(FILES,n))
set xlabel "Fruit prices"
set ylabel "Price"
set yrange [0:5]
set grid y
set key noautotitle
set style fill solid 0.3
N = words(FILES) # number of files
COLS = 3 # number of columns in file
PosX = 0 # x-position of boxplot
plot for [n=1:N] for [COL=1:COLS] PosX=PosX+1 File(n) u (PosX):COL w boxplot lc COL, \
for [COL=1:COLS] File(1) u (NaN):COL w boxes lc COL ti columnhead, \
for [n=1:N] File(1) u ((n-1)*COLS+COLS/2+1):(NaN):xtic(myXtic(n))
### end of code
结果: