【问题标题】:gnuplot histogram label valuesgnuplot 直方图标签值
【发布时间】:2017-05-01 07:02:05
【问题描述】:

我想将 Y 值放在直方图条的顶部,如下图所示: `

set style data histogram
#clustered
#set terminal wxt enhanced persist
set term post eps enhanced "Times-Roman, 14"
set output 'avg_waste.bmp'
set boxwidth 1.3
set grid
set auto y
set auto x

set style histogram clustered gap 1 title offset 1,0.25
set ylabel "\nAverage Resource Wastage\n\n\n" font "Times-Roman,25"
set xlabel "\nWorkflows\n" font "Times-Roman,25"
#set style fill solid noborder
set style fill pattern  border -1

set key at graph 0.2, 0.9
set key spacing 2 font "Times-Roman,18"
set xtics font ", 25"
set ytics font ", 25"


plot for [COL=2:3] 'avg_waste' using COL:xticlabels(1) title columnheader fs pattern 2 `

当我尝试使用标签时,gnuplot 给出错误Not enough columns for this style 我的数据文件是

 #WASTAGE   
        CRCH        HEFT
Cybershake  20.89       22.5785714286
LIGO        187.3228571429  199.5134285714
SIPHT       205.7514285714  210.3685714286
Montage     12.1485714286   12.7942857143

【问题讨论】:

标签: gnuplot histogram


【解决方案1】:

一种可能性是手动放置这些标签,例如:

reset
fontSpec(s) = sprintf("Times-Roman, %d", s)

set term post eps enhanced fontSpec(16)
set output 'avg_waste.eps'

set grid
set auto y
set auto x

ticsFont=fontSpec(16)
set xtics font ticsFont
set ytics font ticsFont

set ylabel "Average Resource Wastage" font fontSpec(25) offset char -1,0
set xlabel "Workflows" font fontSpec(25) offset 0,char -1

set style fill pattern border -1
set style data histograms
set boxwidth 1.0
set style histogram clustered gap 1

keyFont=fontSpec(18)
set key spacing 2 font keyFont
#using directly 'set key spacing 2 font fontSpec(18)' doesn't seem to work...

set key at graph 0.25, 0.9

fn(v) = sprintf("%.1f", v)

plot \
    for [COL=2:3] 'avg_waste' using COL:xticlabels(1) title columnheader fs pattern 2, \
    'avg_waste' u ($0-1-1./6):2:(fn($2)) w labels font fontSpec(14) offset char 0,0.5 t '' , \
    'avg_waste' u ($0-1+1./6):3:(fn($3)) w labels font fontSpec(14) offset char 0,0.5 t ''

此外,由于您似乎想使用从列标题中获取的标题,因此上面的脚本假定输入数据的格式为:

WASTAGE   CRCH        HEFT
Cybershake  20.89       22.5785714286
LIGO        187.3228571429  199.5134285714
SIPHT       205.7514285714  210.3685714286
Montage     12.1485714286   12.7942857143

即第一行没有被注释掉。

这会产生:

编辑: 至于using 规范($0-1-1./6):2:(fn($2)),它基于这样一个事实:条形的各个“块”以整数坐标 0、1、2 和 3 为中心。现在,每组有两个块,每个块的宽度块为 0.3(每组中心之间的 2 个块 + 一个用于空间的空块)。第 0 列 $0 包含数据文件中特定行的从 0 开始的索引,例如对于“Cyber​​shake”行,它等于 1,因此语法 ($0-1-1./6):2:(fn($2)) 然后告诉 Gnuplot 放置一个由函数fn 在坐标-1./6,$2 处生成的标签,即在“Cyber​​shake”组中的左栏顶部。这里,fn 仅用作“宏”,通过sprintf 函数格式化输入的浮点数。

【讨论】:

  • 非常感谢!这个答案为我节省了很多时间
  • @user3319015 我很高兴 :) fontSpec 函数有一个小问题,我已经更新了解决这个问题的答案...
  • fn(v) = sprintf("%.1f", v) 行和最后两行的简短描述会有很大帮助。谢谢
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 2020-10-07
  • 2013-07-28
  • 2017-08-25
  • 2016-05-27
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多