我正在使用ggplot2
,plotly
和ggthemes
创建数据汇总条形图。这是我的代码:
# data
dput(dat)
structure(list(Source = structure(1:11, .Label = c("GTEx", "Target",
"RNASeq", "Microarray", "CNA", "Mutation", "HI51", "IH250", "IH251",
"NB88", "OBER649"), class = "factor"), Type = c("External", "External",
"Cell Line", "Cell Line", "Cell Line", "Cell Line", "Patient Sample",
"Patient Sample", "Patient Sample", "Patient Sample", "Patient Sample"
), Samples = c(1641, 162, 41, 29, 34, 29, 51, 250, 251, 88, 649
), Genes = c(52576, 25818, 26770, 19822, 21376, 12716, 21118,
17768, 17768, 21118, 19858)), .Names = c("Source", "Type", "Samples",
"Genes"), class = "data.frame", row.names = c(NA, -11L))
library(ggplot2)
library(ggthemes)
library(plotly)
p <- ggplot(data = dat, aes(x = Source, y = Genes)) +
geom_bar(stat="identity",aes(color = Type)) +
theme_bw() +
geom_text(aes(label = Samples, color = Type), position=position_dodge(width=0.9), vjust=-0.25, size=5) +
theme_hc(bgcolor = "darkunica") +
scale_colour_hc("darkunica") +
theme(axis.title = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank())
p <- plotly_build(p)
p$layout$plot_bgcolor <- p$layout$paper_bgcolor
p$layout$annotations[[1]]$text <- ""
这是创建的情节:
条形图上的标签显示样本数量。当我将鼠标悬停在它上方时,会显示Source
,Genes
和Type
。即使我在position
中使用vjust
和geom_text
个参数,它也无效。如何调整条形上的标签,使它们可见,即完全在条形图上方或条形图下方?
答案 0 :(得分:1)
使用你的数据我完成了直到plotly_build的阶段。(没有黑暗的主题)
如果你检查你的情节对象,它有两个类别:数据和布局。 图的文本元素是“散射”类型,具有与条形相同的x,y属性。因此,它们与你的酒吧重叠。
p$data[[1]]$type ## Prints result as "bar" type for dat$Type "Cell Line"
p$data[[4]]$type ## Prints result as "scatter" for dat$Type "Cell Line"
p$data[[4]]$mode ## Prints text's mode as "text"
P$data[[1]]$mode ## Prints bar's mode as NULL
在情节上,geom_text没有很好地转换为情节图表。
您需要更改散点图类型的$ y(y轴坐标)(此处文本被映射为散点图类型)。
p$data[[4]]$y
[1] 26770 19822 21376 12716
由于您的y轴缩放到dat $ Genes(范围从0到52576),因此将其坐标增加/减少到1或10不会导致明显的差异。因此,您可能希望尝试更大的值,例如范围1000,2000。
或者,您可以编写代码以将统一数量添加到模式类型“text”的所有y坐标。这是一种方式
for(i in seq(p$data)){
if(!is.null(p$data[[i]]$mode)){ ## if mode is not NULL
if(p$data[[i]]$mode =="text"){ ## above TRUE and if mode is "text"
p$data[[i]]$y = p$data[[i]]$y + max(dat$Genes)/50 ## add max(dat$Genes)/50 or any addend you wish
}
}
}
这是情节: Plot from above