我的数据框有 1 个分类变量和 3 个数值变量。我想在plotly R中构建条形图,其中“份额”和“销售”变量将在条形图中给出并反射(reflect)在左侧y轴上,而“成本”变量将按行可视化,单位将反射(reflect)在右侧第二个轴上。此外,条形颜色应根据“型号”列而不同
df <- data.frame (model = c("A", "B", "C","D","E","F"),
share = c(12,20,15,9,60,20),
sale = c(16,25,18,14,67,28),
cost = c(14,19,28,24,57,28))
预期输出( Code ):
最佳答案
更新2:只是为了展示vjust
的工作原理:
ggplot(df_long, aes(x = model, y= value, label=value))+
geom_col(data = filter(df_long, name != "cost"), aes(fill=name), position = position_dodge())+
scale_fill_manual(values = c("blue", "grey"))+
geom_line(data = filter(df_long, name == "cost"), aes(color = name, group = 1), size = 2)+
scale_color_manual(values = "red")+
geom_point(data = filter(df_long, name == "cost"), size = 2)+
geom_text(data = filter(df_long, name == "cost"), hjust=0, vjust=-6)+
scale_y_continuous(
name = "Sale and Share",
sec.axis = sec_axis(~., name ="Cost")
)+
theme_minimal()+
theme(legend.title=element_blank())
更新辅助 y 轴和点的数字:
library(tidyverse)
df_long <- df %>%
pivot_longer(
cols = -model
)
ggplot(df_long, aes(x = model, y= value, label=value))+
geom_col(data = filter(df_long, name != "cost"), aes(fill=name), position = position_dodge())+
scale_fill_manual(values = c("blue", "grey"))+
geom_line(data = filter(df_long, name == "cost"), aes(color = name, group = 1), size = 2)+
scale_color_manual(values = "red")+
geom_point(data = filter(df_long, name == "cost"), size = 2)+
geom_text(data = filter(df_long, name == "cost"), hjust=0, vjust=0)+
scale_y_continuous(
name = "Sale and Share",
sec.axis = sec_axis(~., name ="Cost")
)+
theme_minimal()+
theme(legend.title=element_blank())
第一个答案: 像这样的吗?
以长格式提供数据
针对每个条形和线条过滤数据
library(tidyverse)
df_long <- df %>%
pivot_longer(
cols = -model
)
ggplot() +
geom_col(data = filter(df_long, name != "cost"), aes(x = model, y= value, fill=name), position = position_dodge())+
scale_fill_manual(values = c("blue", "grey"))+
geom_line(data = filter(df_long, name == "cost"), aes(x = model, y= value, color=name, group=1), size = 2)+
geom_point(data = filter(df_long, name == "cost"), aes(x = model, y= value), size = 2)+
scale_color_manual(values = "red")+
theme_minimal()+
theme(legend.title=element_blank())
关于R:如何构建具有多个条形图和双轴的条形图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72487178/