首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在标题或x轴中不显示正确的列名。

在标题或x轴中不显示正确的列名。
EN

Stack Overflow用户
提问于 2021-12-06 15:52:53
回答 2查看 51关注 0票数 0

我正在尝试使用for循环(或map)生成多个带ggmosaic的图形,但我无法提取正确的标题名或x轴名称。

这是dataframe的示例:

代码语言:javascript
复制
set.seed(42)  ## for sake of reproducibility
n <- 10
dat <- data.frame(balance=factor(paste("DM", 1:n)), 
                  credit_history=sample(c("repaid", "critical"), 10, replace = TRUE),
                  purpose=sample(c("yes", "no"), 10, replace = TRUE),
                  employment_rate=sample(c("0-1 yrs", "1-4 yrs", ">4 yrs"), 10, replace = TRUE),
                  personal_status=sample(c("married", "single"), 10, replace=TRUE),
                  other_debtors=sample(c("guarantor", "none"), 10, replace= TRUE),
                  default=sample(c("yes", "no"), 10, replace = TRUE))
代码语言:javascript
复制
library(ggmosaic)

# create a list of variables
c_names <- dat[ , c("balance", "credit_history", "purpose", "employment_rate",
                    "personal_status", "other_debtors", "default")]

for ( col in c_names ) {
  
 s<- ggplot(data = dat) +
    geom_mosaic(aes(x=product(default, col), fill = default)) +
                  ggtitle(paste("DEFAULT", col, sep = " "))
 print(s)
  }

有人能给我点建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-06 16:18:27

我可能就是这样做的。通常,如果您试图将字符串传递给ggplot美学,您将使用aes_string(),然后将所有美学参数作为字符串值传递,而不是作为未引用的值传递。但是,这似乎不适用于product()函数。下面我建议的替代方法是每次创建一个临时数据对象,其中x轴上的变量总是x,然后一切都正常。标题可以在没有问题的情况下合并字符串。

代码语言:javascript
复制
c_names <- dat[ , c("balance", "credit_history", "purpose", "employment_rate",
                    "personal_status", "other_debtors", "default")]

for ( cn in colnames(c_names)[1:6]) {
  tmp <- data.frame(
    default =dat$default, 
    x = dat[[cn]]
  )
  s<- ggplot(data = tmp) +
    geom_mosaic(aes(x=product(default, x), fill = default)) +
    ggtitle(paste("DEFAULT", cn, sep = " "))
  print(s)
}
票数 2
EN

Stack Overflow用户

发布于 2021-12-06 16:30:58

这是一个与@DaveArmstrong略有不同的解决方案。

代码语言:javascript
复制
c_names <- c("balance", "credit_history", "purpose", "employment_rate",
             "personal_status", "other_debtors")

for ( col in c_names ) {
  df <- dat[, c(col, "default")]
  names(df)[1] <- "y"
  s <- ggplot(data = df) +
    geom_mosaic(aes(x=product(default, y), fill = default)) +
    ggtitle(paste("DEFAULT", col, sep = " ")) +
    labs(x=col)
  dev.new()
  print(s)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70248200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档