【问题标题】:Plot multiple columns in r with barplot用 barplot 在 r 中绘制多列
【发布时间】:2018-11-18 10:06:39
【问题描述】:

如何使用从 csv 文件读取的数据框中的 3 列数据绘制条形图?我尝试使用以下代码执行此操作,但在获得所需的输出时遇到了一些困难:

setwd("\\path\\to\\csv")
df = read.csv("xxxx.csv")

# All hospitals in AL
AL = df[grep("AL", df$State),]

hos <-subset(AL,Hospital.Name=='COOPER GREEN MERCY HOSPITAL')


# Gives me "Error in -0.01 * height : non-numeric argument to binary operator"

hos <- data.frame (HeartAttack=hos$Heart.Attack.Mortality,HeartFailure=hos$Heart.Failure..Mortality,
                   Pneumonia=hos$Pneumonia.Mortality)

# Gives me the graph without displaying the x-axis values 
# but completely defeats the purpose of reading from a csv file since the values are hard-written

#hos <- data.frame (HeartAttack=c(1),HeartFailure=c(5),Pneumonia=c(10))

barplot(t(as.matrix(hos)),main='Mortality Rate in Cooper Green Mercy Hospital',
        xlab='Illness',ylab='Mortality Rate',beside=TRUE)

csv 文件有 10 个标题(从左到右):Hospital.Name、City、State、County.Name、Heart.Attack.Mortality、Heart.Attack.Readmission、 Heart.Failure..Mortality、Heart.Failure.Readmission、Pneumonia.Mortality 和 Pneumonia.Readmission。粗体字是我感兴趣的栏目。

注意:我已经看过这些twoSO questions,但它们并没有完全解决我的问题。

【问题讨论】:

  • 我们无权访问您的磁盘文件,因此创建 hos 的代码不可重现。您可以发布示例数据吗?请使用dput(hos) 的输出编辑问题。或者,如果 dput(head(hos, 20)) 的输出太大。
  • 如果你对基本情节不感兴趣,你可以使用ggplot2::geom_col。您可以使用tidyr::gather 将列重排为变量:值对。
  • @RuiBarradas 我已经提供了有问题的 csv 文件。

标签: r dataframe bar-chart


【解决方案1】:

您的数据在数字列中有"Not Available" 而不是NA,因此这些列属于"factor" 类(如果stringsAsFactors = TRUE,则为默认值)或"character" 类(如果stringsAsFactors = FALSE)。因此,我在读取数据后立即运行以下命令。

df[] <- lapply(df, function(x) {
  is.na(x) <- x == "Not Available"
  x})

i <- sapply(df, function(x) {
  y <- as.numeric(as.character(x))
  !all(is.na(y))
})

df[i] <- lapply(df[i], function(x) as.numeric(as.character(x)))

另一种更好的可能性是用

读取数据
df = read.csv("xxxx.csv", stringsAsFactors = FALSE, na.strings = "Not Available")

然后是您的数据准备代码。

现在剧情。需要 space 参数来为中间条形标签腾出空间。

barplot(t(as.matrix(hos)),
            main = 'Mortality Rate in Cooper Green Mercy Hospital',
            xlab = 'Illness', ylab = 'Mortality Rate',
            names.arg = names(hos),
            beside = TRUE,
            space = c(0.05, 0))

【讨论】:

    猜你喜欢
    • 2021-05-16
    • 2015-10-06
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多