2015-03-25 2 views
0

Я довольно новичок в R, и я пытаюсь собрать три сюжета друг над другом, чтобы изучить разнообразие каждого сюжета друг от друга. Будучи новичком R, я до сих пор не смог найти решение. Я пробовал ggplot и multipot, но не смог выполнить задачу. Может быть, заголовок в моем текстовом файле является проблемой, или я даже не вижу проблему четко! Это было бы большим подспорьем, если кто-нибудь может посоветовать мне в этом отношении ..штабелирование участков с R

Мой сценарий выглядит следующим образом:

defects <- read.table(file="C:/_____.txt",header=TRUE) 
squareX <- c()   
squareY <- c()   

distance <- c(0, 17.0, 17.5, 34.5, 35.0, 52.0, 52.5, 69.5, 70.0, 87.0, 
       87.5, 104.5, 105.0, 122.0, 122.5, 139.5) 
square_beginning <- distance[seq(1,length(distance),2)] 

for (i in 1:length(defects$x)){ 

    for (e in square_beginning){ 
    if (defects$x[i]>e & defects$x[i]<e+17.5) { 
     squareX[i] <- e/17.5+1 
    } 
    if (defects$y[i]>e & defects$y[i]<e+17.5) { 
     squareY[i] <- e/17.5+1 
    } 
    } 
} 

defects<- cbind(defects,squareX,squareY) 
#plot (defects) 

cont <- read.table(file="C:/____.txt",header=TRUE) 
squareX <- c()   
squareY <- c()   

distance <- c(0, 17.0, 17.5, 34.5, 35.0, 52.0, 52.5, 69.5, 70.0, 87.0, 
       87.5, 104.5, 105.0, 122.0, 122.5, 139.5) 
square_beginning <- distance[seq(1,length(distance),2)] 

for (i in 1:length(cont$x)){ 

    for (e in square_beginning){ 
    if (cont$x[i]>e & cont$x[i]<e+17.5) { 
     squareX[i] <- e/17.5+1 
    } 
    if (cont$y[i]>e & cont$y[i]<e+17.5) { 
     squareY[i] <- e/17.5+1 
    } 
    } 
} 
par(mo=c(1,2)) 
plot(defects, main="test 1") 
plot(cont, main="test 2") 
+0

Добро пожаловать в SO! Хорошо, что вы предоставили свой скрипт, но, к сожалению, он не воспроизводится (например, «недостатки» отсутствуют). См. [Как сделать воспроизводимый пример] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) для некоторой информации. Если вы сделаете его воспроизводимым, вы, скорее всего, получите хорошие и быстрые ответы на свой вопрос. –

ответ

0

Вы можете сложить участки, устанавливающие mfrow или mfcol параметры par(). Для 3-х рядов и 1 колонку:

par(mfrow=c(3,1)) #mfrow will fill by rows 

или

par(mfcol=c(3,1)) #mfcol will fill by columns 

Делайте это до вашего plot() заявления. Не нужно использовать ggplot2 или любую другую библиотеку.

Update:

Видимо я неправильно понял ваш вопрос, и если вы хотите, чтобы добавить три набора данных на одном участке, вы не должны использовать par, и сделать как предложено @Carl Witthoft и использовать plot() с последующим по lines() или points().

Построение этого пути создаст график с осевыми лимитами на основе данных, переданных в plot(). Вы можете изменить, что установка пределов вручную с xlim и ylim:

plot(1:10, (1:10)^2, xlim=c(0, 15), ylim=c(0, 150)) 
lines(1:15, seq(1, 150, length=15)) 
points(0:10, seq(1, 150, length=11)) 
+0

спасибо @Molx! это было точно и легко :), хотя сюжет не содержит всех интересующих координат. Это выглядело ограниченным. Поэтому я использовал xaxt = "n" в строке сюжета, за которым следовала ось (1, 139,5, by = 17, las = 1) .. но, похоже, не работает .. не могли бы вы посоветовать, как чтобы решить это также .. Большое спасибо .. –

1

Не ясно, хотите ли вы несколько графиков на одной странице, так как решение Molx»обеспечивает, или хотите ли накладывать данные в один участок.

Если последнее, у вас есть несколько вариантов. Попробуйте построить один набор данных, затем par(new=TRUE), затем следующая команда plot запишет на тот же график. Остерегайтесь дублированных осей и проблем масштабирования.

Или вы можете построить первый набор, а затем явно позвонить lines(cont[,1],cont[,2],...), чтобы построить больше наборов данных.

+1

Прошу прощения, я не дал понять. Я хочу наложить данные на один сюжет. И поэтому я использовал par (mfrow = c (1,1)), и это, похоже, сработало! До сих пор мне удалось получить два разных набора координат в одном и том же сюжете. Как я уже говорил, проблема заключается в том, что сюжет не завершен. Кажется, он ограничен. Например, я хотел построить график до 140,140, ​​но отображаемый график до 120 120 даже с координатами, превышающими это. –

+0

@ Ram.V Хорошее решение - теперь «сюжет» по умолчанию устанавливает диапазоны в мин/макс первого построенный набор данных.Если вы знаете нужный диапазон, задайте его явно с помощью «plot (x, y, xlim = c (min, max), ylim = c (min, max)' –

Смежные вопросы