我在下面有此数据和代码。我想在Size
栏中准确反映核苷酸的大小。如果检查数据的统计信息,则可以清楚地看到T在totalSize中最大,然后A是第二大,在我的图中未正确显示。我下面的绘图代码有什么问题?
#check some statistics:
counts <- aggregate(Size~Nucleotides,all.data,length)
names(counts)[2] <- 'counts'
totalSize <- aggregate(Size~Nucleotides,all.data,sum)
names(totalSize)[2] <- 'totalSize'
merge(counts,totalSize)
# Nucleotides counts totalSize
# 1 A 6 24.700016
# 2 C 6 3.001356
# 3 G 6 5.155665
# 4 T 6 37.471940
地块代码:
p <- ggplot(all.data) +
geom_point(aes(x=Pos, y = Size, color = bases,group = Samples, shape = Samples, size = Nucleotides))+
# geom_point(aes(x=Pos, y = Size, color = bases,group = Samples, shape = Samples))+
scale_shape_manual(values=1:nlevels(all.data$Samples)) +
theme_bw()
p
数据:
all.data <- structure(list(Pos = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), Nucleotides = structure(c(1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 1L, 1L, 1L, 2L, 2L,
2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("A", "C", "G", "T"), class = "factor"),
Size = c(0.80519048411246, 0.375977374812843, 10.6754283813009,
0.495757777408085, 0.615538180003327, 0.329396107136916,
0.835135584761271, 0.562302445516553, 1.11795042422226, 0.246215272001331,
0.339377807353186, 20.0931625353519, 1.06859576968273, 0.264394829612221,
11.510428907168, 0.554494712103408, 0.624265569917744, 0.381903642773208,
0.829905992949471, 0.631609870740306, 1.17876028202115, 0.334165687426557,
0.290099882491187, 16.1689189189189), Samples = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Ago2_SsHV2L_1_CATGGC_L003_R1_001",
"Ago2_SsHV2L_2_CATTTT_L003_R1_001"), class = "factor"), bases = c("21",
"21", "21", "21", "21", "21", "21", "21", "21", "21", "21",
"21", "21", "21", "21", "21", "21", "21", "21", "21", "21",
"21", "21", "21")), .Names = c("Pos", "Nucleotides", "Size",
"Samples", "bases"), row.names = c("1.A", "2.A", "3.A", "1.C",
"2.C", "3.C", "1.G", "2.G", "3.G", "1.T", "2.T", "3.T", "1.A1",
"2.A1", "3.A1", "1.C1", "2.C1", "3.C1", "1.G1", "2.G1", "3.G1",
"1.T1", "2.T1", "3.T1"), reshapeLong = structure(list(varying = list(
c("A", "C", "G", "T")), v.names = "Mismatches", idvar = "Pos",
timevar = "Nucleotides"), .Names = c("varying", "v.names",
"idvar", "timevar")), class = "data.frame")
答案 0 :(得分:2)
这显示了如何汇总值并将其连接回原始数据帧,以便可以直接在ggplot中引用它们。它使用提供的相同聚合代码(未经验证)
#check some statistics:
counts <- aggregate(Size~Nucleotides,all.data,length)
names(counts)[2] <- 'counts'
totalSize <- aggregate(Size~Nucleotides,all.data,sum)
names(totalSize)[2] <- 'totalSize'
## compute the summary and join with detail dataframe
summarized <- merge(counts,totalSize, sort = T)
merged <- merge(all.data, summarized, by ="Nucleotides")
## make a summarized label column example "A 24.70"
summarized$NucleotidesTotalSize <- paste(summarized$Nucleotides, format(round(summarized$totalSize,2), nsmall=2))
library(ggplot2)
p <- ggplot(merged) +
geom_point(aes(x=Pos, y = Size, shape = Samples, size = totalSize, color = bases))+
scale_shape_manual(values=1:nlevels(all.data$Samples)) +
# use the summarized dataframe for labelling and breaks
scale_size(name = "Nucleotides Total Size", breaks = summarized$totalSize, labels=summarized$NucleotidesTotalSize) +
theme_bw()
print(p)