R 第二个y轴上几何图形条的打印比率
我想用第二个轴上的绘图线来绘制geom_bar的比率。 这是我的数据框: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))
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))