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

ggplot2/R中coord_flip后轴标签不显示及离散值报错排查

解决ggplot2绘图中的两个问题

咱们来一步步排查并解决你遇到的这两个ggplot2问题:

1. 错误:Discrete value supplied to continuous scale

这个报错的核心原因是坐标轴类型不匹配:你的author列是离散型的因子变量,但你却用了专门针对连续型变量的scale_x_continuous()来配置x轴。ggplot2对变量类型的匹配要求很严格,所以直接抛出了这个错误。

修复方法:

  • 最简单的方式是直接删掉scale_x_continuous(name="Author")这一行——ggplot2会自动为离散型的author变量生成合适的轴标签和刻度;
  • 如果你需要对离散轴做自定义调整(比如修改标签顺序),可以改用scale_x_discrete(name="Author"),不过这里默认已经能满足需求,删去那行更简洁。

2. 翻转坐标轴后"Author"轴标签不显示

当你调用coord_flip()时,ggplot2会把x轴和y轴的位置完全交换:原来的x轴(author)变成了翻转后的y轴,原来的y轴(value)变成了翻转后的x轴。你之前只给原x轴设置了标签,但翻转后它对应的是y轴,自然不会在你预期的位置显示出来。

修复方法:

推荐用labs()函数统一设置轴标签,这种方式不受坐标轴翻转的影响,逻辑更清晰:

labs(y = "Author", x = "Number of observations", fill = "")

如果你习惯用scale_*系列函数,也可以调整为针对翻转后的轴:把原来的scale_x_continuous换成scale_y_discrete(name="Author"),同时把scale_y_continuous的name参数改成翻转后x轴的标签。

修正后的完整代码

我还顺便修复了scale_y_continuous里的小错误——你之前把seq(0,170,by=10)直接放在参数里,应该指定给breaks参数,否则会引发不必要的警告:

library(dplyr)
library(tidyr)
library(ggplot2)

# Load data 
d <- structure(list(author = structure(c(1L, 2L, 4L, 3L, 5L, 6L, 8L,11L, 13L, 12L, 10L, 9L, 7L), .Label = c("Bahr et al", "Fuller et al","Garbossa et al", "Gokhale et al", "Iuchi et al", "Lee et al","Lee Y et all", "Merrel et al", "Newton et al", "Rossetti et al", "Usery et al", "Wychowski et al", "Zachenhofer et al"), class = "factor"),nAE = c(22L, 34L, 158L, 90L, 70L, 41L, 48L, 32L, 73L, 23L,25L, 13L, 46L), AE = c(3L, 1L, 7L, 1L, 3L, 10L, 3L, 6L, 3L,5L, 4L, 6L, 5L), SAE = c(0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,2L, 0L, 2L, 0L, 0L)), .Names = c("author", "nAE", "AE", "SAE"), class = "data.frame", row.names = c(NA, -13L))

categories <- c("Adverse Effect", "No adverse effects", "Severe side effects")
cols <- c("#f6766d", "#01bfc4", "orange")

q <- d %>% 
  gather(key, value, -author) %>% 
  ggplot(aes(author, value, fill = key)) + 
  geom_col(alpha=0.9) + 
  coord_flip() + 
  scale_y_continuous(
    name = "Number of observations", 
    limits = c(0, 170), 
    breaks = seq(0, 170, by = 10) # 正确指定breaks参数
  ) + 
  theme_grey() + 
  theme(legend.position = "top") + 
  scale_fill_manual(labels = categories, values = cols) + 
  labs(y = "Author", x = "Number of observations", fill = "") # 统一设置标签

q

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:48