Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 设置在ggplot2几何图形栏中使用对数比例时y轴平分的位置_R_Plot_Ggplot2_Axis_Geom Bar - Fatal编程技术网

R 设置在ggplot2几何图形栏中使用对数比例时y轴平分的位置

R 设置在ggplot2几何图形栏中使用对数比例时y轴平分的位置,r,plot,ggplot2,axis,geom-bar,R,Plot,Ggplot2,Axis,Geom Bar,我试图创建一个对数转换基因表达数据的条形图,但我似乎无法更改x轴和y轴之间的相交区域。我可以在BaseR中做到这一点,但这是一个更广泛的闪亮应用程序的一部分,我希望情节之间保持一致。下面是一个简单的例子: df <- structure(list(Genes = 1:96, foldExpression = c(0.0004815809133408, 0.000186554083405159, 0.000142020245166264, 9.91580733203794e-05, 1.

我试图创建一个对数转换基因表达数据的条形图,但我似乎无法更改x轴和y轴之间的相交区域。我可以在BaseR中做到这一点,但这是一个更广泛的闪亮应用程序的一部分,我希望情节之间保持一致。下面是一个简单的例子:

df <- structure(list(Genes = 1:96, foldExpression = c(0.0004815809133408, 
0.000186554083405159, 0.000142020245166264, 9.91580733203794e-05, 
1.50586731037356e-06, 0.00481620829848941, 7.00667826311261e-06, 
0.000604779718674668, 0.163676740192247, 3.62788104054902, 2.44658474904461e-05, 
0.210999773018998, 1.32242024147151e-05, 4.45630431051514e-05, 
0.0125863492990385, 2.49268008840451e-06, 1.50586731037356e-06, 
3.02807684233181e-06, 3.50705461319705e-06, 0.000105632409818916, 
1.19134216162706e-05, 1.29449671876212e-05, 9.74212165299063e-06, 
3.63184214547378e-05, 3.26242458235749e-06, 0.000181524513078334, 
34.0598396752968, 0.000640482203907824, 0.146425597192933, 0.0211590493748083, 
0.00269592092938944, 8.12671770229108e-06, 0.191107177896105, 
0.0330151237231742, 0.000562693414872207, 0.0343156883059605, 
0.138685187592148, 1.50414231710658e-06, 0.000906002611814846, 
1.50586731037356e-06, 0.00070179892741303, 1.64817643465276e-05, 
0.0204972580462547, 0.99689996775548, 5.73398819576538e-06, 0.00172777432122405, 
0.000320413861481815, 1.55703647256429e-05, 4.93694330997287e-05, 
0.00048347227858637, 16.2495902202441, 0.000117459820797509, 
0.46855520182516, 0.187167487209099, 0.0126360264277908, 0.547826527450132, 
0.00010186283275126, 0.107099888658231, 0.928988877390118, 0.0255891506765197, 
14.5878478488994, 0.0351486534651654, 1.50586731037356e-06, 0.12898863274561, 
1.07807490617892e-06, 0.0866906132169558, 0.0846439755023068, 
1.50586731037356e-06, 0.0219408065875584, 0.000633712919015739, 
1.34286645334472, 0.000781651675786721, 0.00111374027766133, 
1.68108995564353, 0.000296064304023605, 0.00553646319822078, 
0.00406191327455512, 0.00597091227977721, 0.000671556330036686, 
0.000494591352109571, 5.85672221179354e-05, 0.0011496215564835, 
0.00382596985799774, 0.35229799361084, 1.04529619268133e-06, 
0.33618336876906, 0.369380625212315, 0.357075757608649, 1.38899057059804, 
1.43890812412937, 0.839895749200342, 0.0188847113666784, 18.005148013488, 
1.3403885084613, 2.74237272274652, 1.38899057059804)), .Names = c("Genes", 
"foldExpression"), row.names = c(NA, -96L), class = "data.frame")

ggplot(df, aes(Genes, foldExpression))+
geom_bar(stat='identity')+
scale_y_log10(breaks=trans_breaks("log10", function(x) 10^x), labels=trans_format("log10",math_format(10^.x)))

df您始终可以使用
geom\u rect
自己绘制条形图。然而,之所以很难做到这一点,是因为从技术上讲,条形图被定义为达到0(在您的案例中,由于技术原因,它变成10^0),因此它们并不是真正在对数刻度上定义的。我建议改为绘制点,可以选择添加
geom_hline
,以获得具有一定意义的值。(尽管如此,1作为折叠表达的基准难道没有意义吗?)感谢@Axeman的回复(以及添加的情节)!我来看看
geom\u rect
。这些值实际上是相对的表达式级别,这就是为什么我不希望1作为基线;这是一个更广泛的闪亮应用程序的一部分,虽然它主要显示折叠变化,但如果不包括控制样本,我希望使用相同的绘图函数来显示相对表达式。我希望能有一个快速的“
+fix_everything()
”ggplot解决方案,我可以根据用户输入进行切换,但看起来我必须为此场景编写一个单独的函数。从
geom_col
:条形图使用高度来表示数值,因此必须始终显示条形图的底部,以便进行有效的视觉比较。内奥米·罗宾斯有一个好朋友。这就是为什么在条形图中使用对数比例的y轴是没有意义的。“点或棒棒糖(带线段的点)会让你的生活更轻松。乘以1000,然后重新标记y轴。太棒了,谢谢@42。我不知道为什么我没有想到这一点。太棒了!
df$foldExpression[which(df$foldExpression < 0.001)] <- 0.001
ggplot(df, aes(Genes, foldExpression))+
geom_crossbar(aes(ymin=0.001, ymax=foldExpression))+
scale_y_log10(breaks=trans_breaks("log10", function(x) 10^x), labels=trans_format("log10",math_format(10^.x))