使用R或Gnuplot绘制时间线的最佳和简单方法是什么?如下图所示:
答案 0 :(得分:2)
我的解决方案使用'烛台'绘图样式,这似乎是根据X和Y列输入修复的。因此,输出图像必须手动旋转,但这似乎是生成从基轴“浮动”的条形图的唯一选择。可能你会想要调整一下风格,但这应该让你开始。
示例输入数据;注意我必须在第1列中添加任意Y轴(旋转的X轴)坐标:
1 proj1 768.83 2011-05-12 2013-06-19
2 proj2 426.79 2011-06-15 2012-08-15
3 proj3 429.89 2011-06-17 2012-08-20
4 proj4 318.02 2012-01-06 2012-11-19
5 proj5 278.72 2011-11-10 2012-08-15
6 proj6 231.16 2011-11-14 2012-07-02
7 proj7 230.27 2011-11-15 2012-07-02
8 proj8 230.23 2011-11-15 2012-07-02
9 proj9 581.81 2011-11-15 2013-06-19
10 proj10 230.08 2011-11-15 2012-07-02
(以下脚本保存为'dates4.dat'。)
gnuplot脚本:
# horizontal timelines / time bars with gnuplot ; manually rotate result image at end
# size specification controls landscape vs. portrait, this is for A4 paper size
set terminal pdf size 21cm,29.7cm
set output 'dates.pdf'
# margins get confused so set explicitly
set lmargin at screen 0.04
set bmargin at screen 0.07
set tmargin at screen 0.97
# rotation will swap Y and X axis
# input Y data as date values
set ydata time
set timefmt "%Y-%m-%d"
# y coordinates now specified in time values
set yrange ['2011-03-01':'2014-01-01']
# normal Y axis labels end up on top of graph, don't want that
unset ytics
# format y2 axis for time scale, this will appear along bottom of graph
set y2data time
set format y2 "%b %Y"
set y2tics font "Courier, 8"
set y2tics rotate by 90
# y2tics 'incr' measured in seconds for y2data time, this is 4 months = 4*30*24*60*60
set y2tics '2011-05-12',10368000,'2013-12-01'
set xrange [-1:28]
set xtics font "Courier, 8"
set xtics rotate by 90 offset 0,-5 out nomirror
# cannot rotate key (dataset label), so must create manually
unset key
set label 'elapsed project time' at 0,'2013-06-15' rotate font "Courier, 8"
set object 1 rect from -0.1,'2013-11-01' to 0,'2013-12-01' fillstyle solid noborder fillcolor rgb "red"
# note duplication of date columns 4 and 5 so don't get whiskers
plot "dates4.dat" using 1:4:4:5:5:xticlabels(2) with candlesticks fillcolor rgb "red"
希望有所帮助!
答案 1 :(得分:1)
不确定r,但在gnuplot中,您可以将轴声明为时间格式。要实现y轴示例:
set ydata time # tells gnuplot that y is a time series
set ylabel 'Submission day in August'
set timefmt '%Y-%m-%d' # this should be set to the format of your date series
set format y '%d' # sets the axis labels format
除此之外,gnuplot支持多个系列,网格和任意形状,所以你应该没问题。
希望这有帮助
答案 2 :(得分:0)
使用@robm和包vistime
的示例数据,您将获得
install.packages("vistime")
library(vistime)
data<-read.csv(text="proj1,768.83,2011-05-12,2013-06-19
proj2,426.79,2011-06-15,2012-08-15
proj3,429.89,2011-06-17,2012-08-20
proj4,318.02,2012-01-06,2012-11-19
proj5,278.72,2011-11-10,2012-08-15
proj6,231.16,2011-11-14,2012-07-02
proj7,230.27,2011-11-15,2012-07-02
proj8,230.23,2011-11-15,2012-07-02
proj9,581.81,2011-11-15,2013-06-19
proj10,230.08,2011-11-15,2012-07-02", header=F, sep=",")
data$tooltip=paste(data$V1, data$V2)
vistime(data, events="V1", start="V3", end="V4")
或者,
vistime(data, events="V2", start="V3", end="V4", groups="V1")