2013-03-14 3 views
4

Я пытаюсь построить изохрон U-Pb, который в основном представляет собой график xy, с эллипсами ошибок вокруг каждого datapoint, чтобы указать точность этой точки данных. Вот пример того, что я пытаюсь достичь, только разница в том, что у меня гораздо больше точек данных:Эллипсы ошибок построения в R

example plot

У меня есть симметричный + и - ошибки для каждой точки х и у пространства что я хотел бы использовать, чтобы диктовать форму эллипса ошибки.

Ниже приведен код, который я написал до сих пор. Это вычисляет мои данные, но вместо эллипсов ошибок у меня в настоящее время есть ошибки.

# Select data file. 
fname<-file.choose() 
# Rename imported data file. 
upbiso <- read.table(file=fname, header= TRUE) 
# Attaches data file as default data source. 
attach(upbiso) 
# Reads and display column headers in console. 
names(upbiso) 
# Sets margins around plot. 
par(mar=c(5,5,4,2)) 
# Plots 238U/206Pb vs 207Pb/206Pb with superscript notation for isotopic masses, xlim and ylim sets min and max limit for axes, las rotates y axis labels, cex.lab increases the size of the axis labels. 
plot(UPb, PbPb, xlab = expression({}^238*"U/"*{}^206*"Pb"), ylab = expression({}^207*"Pb/"*{}^206*"Pb"), xlim = c(0,2500),ylim = c(0, 1), las=1, cex.lab = 1.5) 
# Opens Oceanographic package to run errorbars function and runs 1 sigma percent error bars for x-y co-ordinates. 
library(oce) 
errorbars(UPb,PbPb,UPbErrP,PbPbErrP, percent=T) 

Как я могу поменять погрешности на эллипсы ошибок?

Вот ссылка Google docs на мои данные, которые находятся в формате .txt.

https://docs.google.com/file/d/0B75P9iT4wwlTNUpQand2WVRWV2s/edit?usp=sharing

Колонки UPb, UPbErrP (ошибка на УПБ на 1 сигма%), UPbErrAbs (абсолютная ошибка на ВПВ), а затем тем же самым снова для данных PbPb.

Если вам нужно я уточнить что-либо, просто дайте мне знать, и я сделаю все возможное,

+2

Привет Крис, добро пожаловать к SO. Формат, в котором вы разместили свой вопрос, требует времени и усилий для других, чтобы просто * получить ваши данные в *. Вместо этого сосредоточьтесь на небольшом воспроизводимом примере, который воссоздает вашу проблему. Вставка вывода 'dput (head (mydata))' в качестве кодового блока поможет. См. [Этот пост] (http://stackoverflow.com/q/5963269/1478381) о том, как сделать отличный воспроизводимый пример ... –

+1

Привет, Саймон, спасибо за советы по поводу этикета. Как вы можете сказать, я совершенно новичок в R и stackoverflow, поэтому я старался изо всех сил объяснять себя и приводить примеры и набор данных. Я запомню команду dput и ссылку, которую вы отправили в будущее! – cjms85

+0

Нет проблем. Посмотрите, как быстро нужно было ответить - правильно отформатированный вопрос не помогает. Добро пожаловать в Радость SO! –

ответ

7

Несколько месяцев назад я написал небольшую функцию для рисования эллипсов в answer someone else's question. Упротив это немного, мы можем добиться чего-то полезного для вашей проблемы, я думаю.

ellipse <- function(a,b,xc,yc,...){ 
    # a is the length of the axis parallel to the x-axis 
    # b is the length of the axis parallel to the y-axis 
    # xc and yc are the coordinates of the center of the ellipse 
    # ... are any arguments that can be passed to function lines 
    t <- seq(0, 2*pi, by=pi/100) 
    xt <- xc + a*cos(t) 
    yt <- yc + b*sin(t) 
    lines(xt,yt,...) 
    } 

plot(UPb, PbPb, pch=19, 
    xlab = expression({}^238*"U/"*{}^206*"Pb"), ylab = expression({}^207*"Pb/"*{}^206*"Pb"), 
    xlim = c(0,2500),ylim = c(0, 1), las=1, cex.lab = 1.5) 

apply(upbiso, 1, 
     function(x)ellipse(a=x[2]*x[1]/100, b=x[5]*x[4]/100, 
           xc=x[1], yc=x[4], col="red")) 

enter image description here

+0

Огромное вам спасибо, это именно то, что я искал! – cjms85

+0

Привет! Ваш код выглядит великолепно! Вы знаете, есть ли причудливый способ (например, с ggplot2 или стилями Tableu) для окраски областей внутри эллипсов? – edwineveningfall

+0

Я думаю, вы можете сделать это просто, заменив 'lines' на' polygon' в определении функции 'ellipse'. – plannapus

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