在 ggplot 中使用 log10_trans() 时出错

An error when using log10_trans() in ggplot

我有一个包含三列的数据框 testlist:“Time Point”、“G1”和“G2

我 运行 这条 ggplot 线,y 轴为“Time point”。

testplot <- ggplot(testlist, aes_string(x = "G1", y = "`Time Point`")) +
  geom_density_ridges_gradient()+
  scale_x_continuous(trans = log10_trans(),#,
                     limits = c(10^1,10^4),
                     breaks = trans_breaks("log10", function(x) 10^x,n = 2)) 

使用 G1,它 运行s 并绘制我的数据。但是,对于 G2,我收到此错误:

Error in if (!(lo <- min(hi, IQR(x)/1.34))) (lo <- hi) || (lo <- abs(x[1L])) ||  : 
  missing value where TRUE/FALSE needed

数据集G1和G2都是70500左右的连续点,唯一不同的是范围:

G1: -16.34 to 54454
G2: -131.25 to 4675

我认为这与对负数应用变换有关,但两组都有负数。无论是否绘制,我也会收到此警告消息:

In addition: Warning messages:
1: In self$trans$transform(x) : NaNs produced
2: Transformation introduced infinite values in continuous x-axis 

如有任何帮助,我们将不胜感激。

EDIT1:我无法举一个最小的例子。 我将尝试使用示例进行另一次编辑。

EDIT2:这是 CSV 文件的 link:CSV file

EDIT3:日志函数在数据框中生成 -inf 值,ggplot 不会使用这些值。我会更新 post 最终会做什么。

失败的区别在于一个包含零而另一个不包含零。取负数对数的 NaN 在密度图函数中被移除,但对数为零的 -inf 不是。 ggridges层失败是因为它使用标准差来设置带宽,而向量包含-inf时的标准差为NaN。如果您想使用对数转换,没有理由不删除 negatives/zeros,但如果您将参数 frombandwidth 输入 ggridges,则可以保持原样geom.