R 第二个y轴上几何图形条的打印比率

R 第二个y轴上几何图形条的打印比率,r,ggplot2,R,Ggplot2,我想用第二个轴上的绘图线来绘制geom_bar的比率。 这是我的数据框: df <- data.frame(code=c('F6', 'F6','D4', 'D4', 'F5', 'F5', 'C4', 'C4', 'F7', 'F7'), group=c('0','1','0','1','0','1','0','1','0','1'), count=c(80, 700, 30, 680, 100, 360, 70, 230, 40, 200))

我想用第二个轴上的绘图线来绘制geom_bar的比率。 这是我的数据框:

df <- data.frame(code=c('F6', 'F6','D4', 'D4', 'F5', 'F5', 'C4', 'C4', 'F7', 'F7'),
           group=c('0','1','0','1','0','1','0','1','0','1'),
           count=c(80, 700, 30, 680, 100, 360, 70, 230, 40, 200))

我还想知道各组之间的比例。 例如,对于C4,它将是70/230*100=30%。以下是它所能代表的:


有什么想法吗?

您可以使用
tidyverse
库计算每组的百分比,然后使用次轴将其添加到绘图中:

library(tidyverse)

df <- data.frame(code=c('F6', 'F6','D4', 'D4', 'F5', 'F5', 'C4', 'C4', 'F7', 'F7'),
                 group=c('0','1','0','1','0','1','0','1','0','1'),
                 count=c(80, 700, 30, 680, 100, 360, 70, 230, 40, 200))
现在,当您绘制此图时,可以指定一个次轴,但是您必须记住告诉ggplot您应该将数字除以7,以便次轴标签有意义

ggplot(df, aes(x=code, y=count)) +
  geom_bar(stat ="identity", position="dodge", aes(fill=group)) +
  geom_point(data = percentage.df, aes(code, percentage)) +
  geom_line(data = percentage.df, aes(order, percentage)) +
  scale_y_continuous(sec.axis = sec_axis(~ . /7))

您可以使用
tidyverse
库计算每组的百分比,然后使用次轴将其添加到绘图中:

library(tidyverse)

df <- data.frame(code=c('F6', 'F6','D4', 'D4', 'F5', 'F5', 'C4', 'C4', 'F7', 'F7'),
                 group=c('0','1','0','1','0','1','0','1','0','1'),
                 count=c(80, 700, 30, 680, 100, 360, 70, 230, 40, 200))
现在,当您绘制此图时,可以指定一个次轴,但是您必须记住告诉ggplot您应该将数字除以7,以便次轴标签有意义

ggplot(df, aes(x=code, y=count)) +
  geom_bar(stat ="identity", position="dodge", aes(fill=group)) +
  geom_point(data = percentage.df, aes(code, percentage)) +
  geom_line(data = percentage.df, aes(order, percentage)) +
  scale_y_continuous(sec.axis = sec_axis(~ . /7))

您可以尝试将比率标准化为最大y值(
计数


您可以尝试将比率标准化为最大y值(
计数


嘿@Kamloops!你是说你想用代码生成问题中的第二个图形吗?不清楚你是用代码还是用照片编辑软件制作了第二张图。嗨@Nova,是的,当然,我想用R和ggplot制作。我只是在这里用一个照片编辑软件快速完成了。嘿@Kamloops!你是说你想用代码生成问题中的第二个图形吗?不清楚你是用代码还是用照片编辑软件制作了第二张图。嗨@Nova,是的,当然,我想用R和ggplot制作。我只是在这里用一个照片编辑软件快速完成了。啊,你做了我懒得做的事:啊,你做了我懒得做的事:P
library(tidyverse)
MAX= max(df$count)

df %>% 
  group_by(code) %>% 
  mutate(ratio = count[1]/count[2]) %>%
  mutate(ratio_norm = MAX*ratio) %>%   
 ggplot(aes(x=code)) +
  geom_col(aes(y=count, fill=group), position="dodge") + 
  geom_point(data = . %>% distinct(code, ratio_norm), aes(y=ratio_norm)) +
  geom_line(data = . %>% distinct(code,  ratio_norm), aes(y=ratio_norm, group = 1)) + 
  scale_y_continuous(sec.axis = sec_axis(~./MAX, labels = scales::percent))