如何使用对数刻度在geom_boxplot中包括-inf值?

时间:2019-02-10 04:41:37

标签: r ggplot2

我认为ggplot在对数刻度中如何处理-inf不一致。以下是两个显示相似信息的图。在第一种情况下,我使用箱形图以对数刻度显示示例数据集的第25、50和75%。如您所见,它将删除0(或对数刻度上的-inf值),并从其余数据点创建箱形图。

在第二个示例中,我预先计算了25%,50%和75%百分位数,然后使用geom_point绘制具有对数刻度的相似图。在这种情况下,零值会简单地绘制在轴的底部,而不是被删除。我认为这种行为更好。有没有一种方法可以绘制箱形图而不删除-inf值?

非常感谢。

library(tidyverse)
# create dataset
Test_Data <- data.frame("Values" = seq(0,10000,1))
Test_Data$Values[Test_Data$Values%%3==0] <- 0

Test_Data$Groups[Test_Data$Values%%2==0] <- 'A'
Test_Data$Groups[Test_Data$Values%%2!=0] <- 'B'
Test_Data$Values <- Test_Data$Values/10000


# plot boxplot
ggplot(data = Test_Data, aes(x= Groups, y = Values)) + 
  geom_boxplot()+ 
  scale_y_continuous(trans='log10', limits = c(1e-5, 1e1)) +
  annotation_logticks(sides = "l") 

# Create dataset with quantile measures
Test_Data_Processed <- Test_Data %>%
  select_all() %>%
  group_by(Groups) %>%
  summarise(Num = n(),
            Median = median(Values),
            Percnt_25 = quantile(Values,.25),
            Percnt_75 = quantile(Values, .75)) %>%
  gather(Measure, Value, Median:Percnt_75)

# plot with geom_point
ggplot(data = Test_Data_Processed, aes(x= Groups, y = Value, shape = Measure, color = Groups)) + 
  geom_point(size = 4) +
  scale_y_continuous(trans='log10', limits = c(1e-5, 1e1)) +
  annotation_logticks(sides = "l") 

0 个答案:

没有答案