0

我有一个收入变量。我想在一个带有两个 y 轴的图中制作直方图和累积分布的组合图。我得到了这个代码,

income<-  bi_tr%>%
  ggplot(aes(x=`12 Income`,na.rm = TRUE))+ #this fill comment goes to define legend
  geom_histogram(binwidth=50)+ #setting default color for aes in histogram
  theme_classic()+
  geom_line(stat = "ecdf")+
  geom_point(stat="ecdf",size=2)+
  scale_y_continuous(sec.axis = sec_axis(trans = ~./max(bi_tr$`12 Income`),
                                         name = "Cumulative distribution (%)"))+
  labs(x="Income (USD/month)",y="Frequency")+
  theme(text = element_text(size = 16, family = "serif"))+
  xlim(0,500)

然后在我运行income它返回这个情节 在此处输入图像描述

就个人而言,对于这种情况,我在 R(没有 ggplot)中找到了一些类似的内置函数参考。但是,不知何故,我想改用 ggplot,希望以后能在更多情况下处理相同的语法模式。然后,我找到trans=~./max(data)了适用于 ggplot 的行。然后我把这个结果塞进了肚子里。

非常感谢

4

1 回答 1

0

由于没有提供数据,我使用了@Tung 给出的链接中的示例,并感谢@camille。我替换geom_line()geom_step()以显示cdf. 代码如下:

d <- tribble(
    ~ category, ~defect,
    "price", 80,
    "schedule", 27,
    "supplier", 66,
    "contact", 94,
    "item", 33
  ) %>% arrange(desc(defect)) %>%
    mutate(
      cumsum = cumsum(defect),
      freq = round(defect / sum(defect), 3),
      cum_freq = cumsum(freq)
    ) %>%
    mutate(category = as.factor(category) %>% fct_reorder(defect))

  brks <- unique(d$cumsum)

  ggplot(d, aes(x = fct_rev(category))) +
    geom_col(aes(y = defect)) +
    geom_point(aes(y = cumsum)) +
    geom_step(aes(y = cumsum, group = 1), direction="vh") +
    scale_y_continuous(sec.axis = sec_axis(~. / max(d$cumsum), 
                                           name = "Cumulative distribution (%)", 
                                           labels = scales::percent), 
                       breaks = brks) +
    labs(x="Category",y="Number of defects")

你得到以下输出:

输出

您应该能够根据您的数据调整程序。

于 2020-06-12T00:01:32.640 回答