/ / Jak wykreślić kilka porcji danych zawartych w jednym pliku? - python, r, matlab, matplotlib, gnuplot

Jak wykreślić kilka porcji danych zawartych w jednym pliku? - python, r, matlab, matplotlib, gnuplot

Mam plik, który zawiera 2 kolumny podzielone na bloki. Każdy blok ma nagłówek, a następnie kilka danych. Bloki są oddzielone od siebie pustą linią. Coś jak:

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
:              :

Jak mogę wykreślić ten plik za pomocą MATLAB, xmgrace, gnuplot lub innego odpowiedniego narzędzia?

Odpowiedzi:

1 dla odpowiedzi № 1

Oto sposób na zrobienie tego 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 dla odpowiedzi nr 2

Zakładając, że masz plik "data.dat" i zakładając, że pracujesz nad linuxem i możesz korzystać z awk, proponuję:

  • Użyj awk, aby usunąć tekst i wyświetlić tylko porcję danych, które chcesz wyświetlić
  • Użyj wewnętrznej pętli Gnuplot, aby wyświetlić dane jako odrębne wykresy.

Oto działa gnuplot polecenie, jeśli chcesz spróbować samemu. Używam pętli for do wyświetlania twoich dwóch kawałków danych, podstępem jest wywołanie systemowe do awk, zmienna awk a będąc "selektorem fragmentów"

plot for [i=1:2] sprintf("< cat data.dat |  awk ""/./{ if ($1=="x") {a++} else if (a==%d) {print $0 }}""",i) u 1:2

To najbrzydsze rozwiązanie, jakie kiedykolwiek napotkałem na problem :) Ale działa!

To jest wynikowy obraz

edit: Będziesz potrzebował porządnej wersji gnuplot, użyłem gnuplot 4.6 patchlevel 3.


0 dla odpowiedzi № 3

Utwórz dwie macierze w MathLab

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]

następnie

plot(A,B)

Możesz także użyć funkcji fabuły z wieloma parami argumentów macierzy.

plot(x1,y1,x2,y2)