在ggplot的scale_y_continuous中访问继承数据对象报错求助
问题原因
在scale_y_continuous的参数中无法直接通过.引用管道上游的数据——因为ggplot的图层函数运行在独立环境中,.这个符号在这里未被定义,所以会抛出object '.' not found错误。
解决方案
方案1:提前存储过滤后的数据(推荐,代码更清晰)
先把过滤后的数据集赋值给变量,后续在scale_y_continuous中直接引用该变量即可:
# 预处理数据并保存 filtered_diamonds <- diamonds %>% filter(cut %in% c("Very Good"), carat > 2.8) # 绘图时直接调用变量 filtered_diamonds %>% ggplot(aes(x=table, y=price, fill=color)) + geom_bar(stat="identity", position="dodge") + geom_text(aes(label=table, group=color), vjust=-0.5, position=position_dodge2(width = 1, preserve="single")) + scale_y_continuous(expand = c(0, 0), limits = c(0, max(filtered_diamonds$table) * 1.1))
方案2:通过ggplot_build获取绘图数据
如果不想额外创建变量,可以用ggplot_build()提取当前绘图使用的数据,再从中获取table列的最大值:
diamonds %>% filter(cut %in% c("Very Good"), carat > 2.8) %>% ggplot(aes(x=table, y=price, fill=color)) + geom_bar(stat="identity", position="dodge") + geom_text(aes(label=table, group=color), vjust=-0.5, position=position_dodge2(width = 1, preserve="single")) + scale_y_continuous(expand = c(0, 0), limits = c(0, max(ggplot_build(last_plot())$data[[1]]$table) * 1.1))
额外提示
注意到你用table列的最大值设置y轴(对应price字段)的上限,这可能是笔误。如果需要基于price的最大值调整y轴范围,只需将max(filtered_diamonds$table)替换为max(filtered_diamonds$price)即可。
内容的提问来源于stack exchange,提问作者pluke
相关产品推荐
相关产品推荐

