我有一个包含2列的文件。每个块都有一个标题,后跟一些数据。这些块通过空行彼此分开。类似的东西:
x y1
0 -65.950939
0.01417027519 -65.950969
0.02834055037 -65.950946
0.04251082556 -65.950961
x y2
0 -39.797446
0.01417027519 -39.796663
0.02834055037 -39.794279
0.04251082556 -39.790951
: :
如何使用MATLAB,xmgrace,gnuplot或任何其他相关工具绘制此文件?
答案 0 :(得分:1)
以下是在 R
中执行此操作的方法# Your data
df <- read.table(text="x y1
0 -65.950939
0.01417027519 -65.950969
0.02834055037 -65.950946
0.04251082556 -65.950961
x y2
0 -39.797446
0.01417027519 -39.796663
0.02834055037 -39.794279
0.04251082556 -39.790951")
# Create indicator for blocks
df$tag <- cumsum(grepl("[[:alpha:]]",df$V1))
# Reomve letters from columns
df <- df[!grepl("[[:alpha:]]",df$V1),]
# Convert to numerics
df[] <- sapply(df , as.numeric)
#plot
library(ggplot2)
ggplot(df , aes(V1 , V2 )) + geom_point() + facet_wrap(~tag , scales="free")
答案 1 :(得分:1)
假设你有一个文件“data.dat”,假设你正在使用linux并且你可以使用awk,这就是我的建议:
如果您想自己尝试,可以使用 gnuplot 命令。我使用for循环来显示你的两个数据块,诀窍是系统调用awk,awk变量a
是“块索引选择器”
plot for [i=1:2] sprintf('< cat data.dat | awk ''/./{ if ($1=="x") {a++} else if (a==%d) {print $0 }}''',i) u 1:2
这是我遇到问题时最丑陋的解决办法:) 但它的确有效!!
编辑:你需要一个体面的gnuplot版本,我使用了gnuplot 4.6 patchlevel 3.
答案 2 :(得分:0)
在MatLab中创建两个矩阵
A=[0 -65.950939; 0.01417027519 -65.950969; 0.02834055037 -65.950946; 0.04251082556 -65.950961]
B=[0 -39.797446; 0.01417027519 -39.796663; 0.02834055037 -39.794279; 0.04251082556 -39.790951]
然后
plot(A,B)
您还可以将绘图函数与多对矩阵参数一起使用。
plot(x1,y1,x2,y2)