我正在尝试根据以下数据(dataframe = df)创建多个数据的条形图,这些数据的y轴的log10 y轴的非零值小于1,如下图所示(在graphpad中创建):>
No Perc Codon
1 72 ATA
2 12.7273 ATG
3 8.72727 GTG
4 0.727273 ATG
5 0.363636 GTG
6 0.363636 GTG
7 0.363636 GTG
8 0.363636 GTG
9 0.363636 GTG
10 0.363636 ATA
11 0.363636 ATA
12 0.363636 ATA
13 0.363636 ATA
14 0.363636 ATA
15 0.363636 ATA
16 0.363636 ATG
17 0.363636 ATG
18 0.363636 ATG
19 0.363636 ATG
20 0.363636 ATG
使用ggplot获取以下数据,我试图根据其他问题的其他信息创建类似的内容,以解决我的问题(无济于事)。
ggplot(data=df,aes(x=No, y=Perc, color=Codon)) + geom_bar(stat="identity") + scale_y_log10( breaks=c(0.1, 1, 10, 100), limits=c(0.1, 100), position = "top") + coord_flip() + geom_segment( aes(x=No, xend=No, y=0.01, yend=Perc))
产生以下图像:
但是,我希望条形图在小于1的情况下仍沿相同的方向继续。此外,有一种方法可以将x轴重新定位到图形的顶部,并重新排列数据,以使最大的值是否在图形板生成的图像中位于顶部?
我知道其他类似的questions也描述了类似的问题,这些问题与条的方向有关,但没有解决方案。
对此新手的任何帮助或建议将不胜感激。 谢谢!
答案 0 :(得分:1)
geom_bar
在scale_y_log
上表现不佳。我认为最好的方法是使用geom_segment
,因为您已经在尝试了。请注意,您要让geom_segment
从0.01
开始,但是y
轴仅从0.1
开始。调整aes
可以使您有所作为。怎么样:
library(ggplot2)
ggplot(data = df) +
geom_segment(aes(x = No,
xend = No,
y = 0.1,
yend = Perc,
colour = Codon),
size = 3) +
coord_flip() +
scale_y_log10(name = "Perc",
breaks = c(0.1, 1, 10, 100),
limits = c(0.1, 100),
position = "top")
如果其他人想去的话,我将以一种易于使用的方式将数据包括在这里:
txt <- "No Perc Codon
1 72 ATA
2 12.7273 ATG
3 8.72727 GTG
4 0.727273 ATG
5 0.363636 GTG
6 0.363636 GTG
7 0.363636 GTG
8 0.363636 GTG
9 0.363636 GTG
10 0.363636 ATA
11 0.363636 ATA
12 0.363636 ATA
13 0.363636 ATA
14 0.363636 ATA
15 0.363636 ATA
16 0.363636 ATG
17 0.363636 ATG
18 0.363636 ATG
19 0.363636 ATG
20 0.363636 ATG"
df <- read.table(text = txt, header = TRUE)
由reprex package(v0.2.1)于2019-12-12创建
答案 1 :(得分:1)