You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ggplot2绘制仅含非零值的柱状图?R编程技术问询

用ggplot2实现非零值柱状图的方法

首先,ggplot2依赖结构化的数据框,我们可以从你已生成的graph1表格出发,或者直接从原始数据框df处理,两种方法都给你:

方法1:基于你已生成的graph1表格

先把表格转成ggplot能识别的数据格式,再筛选非零值:

# 加载工具包(没装过先运行install.packages("tidyverse"))
library(tidyverse)

# 将table转为数据框,筛选x第一个水平的非零计数
plot_data <- as.data.frame(graph1) %>%
  filter(Var1 == rownames(graph1)[1], Freq != 0)

# 绘制柱状图
ggplot(plot_data, aes(x = Var2, y = Freq)) +
  geom_col(fill = "cornflowerblue") + # 已有计数时用geom_col更合适
  labs(x = "变量y", y = "计数", title = "x第一个水平下y的非零计数") +
  theme_bw()

方法2:直接从原始数据框df处理(更推荐)

跳过生成table的步骤,直接对原始数据统计筛选,更贴合ggplot的工作流:

library(tidyverse)

# 从原始数据提取x第一个水平的y的非零计数
plot_data <- df %>%
  filter(x == levels(df$x)[1]) %>% # 锁定x的第一个分类水平
  count(y) %>% # 统计每个y的出现次数
  filter(n != 0) # 排除计数为0的情况

# 绘图
ggplot(plot_data, aes(x = y, y = n)) +
  geom_col() +
  labs(x = "y", y = "计数") +
  theme_minimal()

补充说明

  • 你原来的barplot只取了graph1[1, ],也就是x的第一个分类水平对应的y的计数,上面的代码都保留了这个逻辑;如果要展示x所有水平的非零计数,去掉filter(x == levels(df$x)[1])即可。
  • geom_col和geom_bar(stat = "identity")效果完全一致,任选其一就行。

内容的提问来源于stack exchange,提问作者Julius Julius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:20:41