首页 > 解决方案 > 我如何将我的因素变成 ggplot 中的数字?

问题描述

我有一个包含两列的数据集(称为 nordland);公司名称和日期。我想将其绘制到 ggplot 中,以便显示给定日期有多少家公司。我该怎么做呢?

当我运行这个:

plot <- ggplot(nordland, aes(x = nordland$Date, y = nordland$`Firm name`)) +
geom_col() +
labs(x = "Date", y = "Number of firms", Title = "Number of new firms per month")

我在 Y 轴上得到所有公司的名称,而不是公司的数量。

这是相关的最小代码:

library(rvest)
library(tidyverse)
library(dplyr)
library(tidyr)
library(ggplot2)

url <- "https://w2.brreg.no/kunngjoring/kombisok.jsp?datoFra=01.01.2019&datoTil=25.09.2019&id_region=100&id_fylke=-+-+-&id_niva1=2&id_bransje1=0"

webpage <- read_html(url)

newfirmdata <- html_nodes(webpage, "td td:nth-child(2) p")
newfirmtext <- html_text(newfirmdata)
newfirmtext <- gsub("\n", "", newfirmtext)
newfirmtext <- gsub(" ","", newfirmtext)
Firmname <- data.frame(newfirmtext)
Firmname <- rename(Firmname, "Firm name" = "newfirmtext")
Firmname <- Firmname [-1, ]
Firmname <- as.factor(Firmname)
Firmname <- unique(Firmname)

datedata <- html_nodes(webpage, "td:nth-child(6) p")
datetext <- html_text(datedata)
datetext <- as.Date(datetext, "%d.%m.%Y")
Datename <- data.frame(datetext)
Datename <- Datename [-1, ]

totaldata <- data.frame(Firmname, Datename)
totaldata <- rename(totaldata, "Firm Name" = "Firmname", "Date" = "Datename")

nordland <- data.frame(totaldata$`Firm Name`[1:1052], totaldata$Date[1:1052])
nordland <- rename(nordland, "Firm name" = "totaldata..Firm.Name..1.1052.", "Date" = "totaldata.Date.1.1052.")

我预计该图将显示给定日期的公司数量,而不是显示公司的名称。这会创建一个不可读的复杂图形。

标签: rggplot2

解决方案


考虑一下geom_bargeom_col它的包装器在哪里stat="identity"需要从数据集中映射的 y 和 x)。但是,您只需要带有计数的 x 和带有 的?geom_bar默认值stat = "count"

此外,切勿$在内部但未引用的数据框列名称中使用引用,并避免将对象命名为可能导致命名冲突aes()的基本 R 之类的内置函数。plot()最后,参数标题应该小写并且 R 区分大小写。

myplot <- ggplot(nordland, aes(x = Date)) +
           geom_bar() +
           labs(x = "Date", y = "Number of firms", 
                title = "Number of new firms per month") +
           theme(plot.title = element_text(hjust = 0.5))

如果您真的打算使用geom_col,请添加一个全为 1 的新列,以便geom_col绘制图形的总和:

nordland$N <- 1
myplot <- ggplot(nordland, aes(x = Date, y = N)) +
          geom_col() +
          labs(x = "Date", y = "Number of firms",
               title = "Number of new firms per month")
           theme(plot.title = element_text(hjust = 0.5))

带标题的情节


推荐阅读