Как построить несколько строк в R
У меня есть данные, которые выглядят так:
#d TRUE FALSE Cutoff
4 28198 0 0.1
4 28198 0 0.2
4 28198 0 0.3
4 28198 13 0.4
4 28251 611 0.5
4 28251 611 0.6
4 28251 611 0.7
4 28251 611 0.8
4 28251 611 0.9
4 28251 611 1
6 19630 0 0
6 19630 0 0.1
6 19630 0 0.2
6 19630 0 0.3
6 19630 0 0.4
6 19636 56 0.5
6 19636 56 0.6
6 19636 56 0.7
6 19636 56 0.8
6 19636 56 0.9
6 19636 56 1
Итак, я хочу построить их на основе True (по оси Y) и False (по оси X).
Так я хочу, чтобы он выглядел грубо.
![This is the way I want it to appear roughly]()
Какой правильный способ сделать это?
Мой код ниже не работает
dat<-read.table("mydat.txt", header=F);
dis <- c(4,6);
linecols <-c("red","blue");
plot(dat$V2 ~ dat$V3, data = dat, xlim = c(0,611),ylim =c(0,28251), type="l")
for (i in 1:length(dis)){
datax <- subset(dat, dat$V1==dis[i], select = c(dat$V2,dat$V3))
lines(datax,lty=1,type="l",col=linecols[i]);
}
Ответы
Ответ 1
Так как ваши данные уже в длинном формате, и я все равно люблю графику ggplot, я бы предложил этот путь. После прочтения ваших данных (обратите внимание, что TRUE
и FALSE
не являются допустимыми именами, поэтому R добавляет a .
к именам столбцов), следующее должно работать:
require(ggplot2)
ggplot(dat, aes(FALSE., TRUE., colour = as.factor(d), group = as.factor(d))) +
geom_line()
ggplot2 сайт полон хороших советов. Также обратите внимание на этот поисковый запрос на SO для получения множества других полезных советов по смежным темам.
![enter image description here]()
И для записи, вот как я подхожу к вашей проблеме, изменяя исходный код:
colnames(dat)[2:3] <- c("T", "F")
dis <- unique(dat$d)
plot(NA, xlim = c(0, max(dat$F)), ylim = c(0, max(dat$T)))
for (i in seq_along(dis)){
subdat <- subset(dat, d == dis[i])
with(subdat, lines(F,T, col = linecols[i]))
}
legend("bottomright", legend=dis, fill=linecols)
![enter image description here]()
Ответ 2
Здесь базовый метод R, предполагая, что ваши данные называются dat
в этом примере:
plot(1:max(dat$false), xlim = c(0,611),ylim =c(19000,28251), type="n")
apply(
rbind(unique(dat$d),1:2),
#the 1:2 here are your chosen colours
2,
function(x) lines(dat$false[dat$d==x[1]],dat$true[dat$d==x[1]],col=x[2])
)
Результат:
![enter image description here]()
edit - при использовании нижнего регистра true/false для имен переменных принимается, вероятно, это еще не самая лучшая практика кодирования.