r - 我如何将我的因素变成 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.")
我预计该图将显示给定日期的公司数量,而不是显示公司的名称。这会创建一个不可读的复杂图形。
解决方案
考虑一下geom_bar
(geom_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))
推荐阅读
- c++ - 布尔成员的 C++ 多线程访问
- javascript - 在 vue 中生成随机数据
- javascript - 为什么 chrome.action.onClicked.addListener 不起作用?
- python - 如何使伺服仅在指定的时间内运行?
- google-maps - 从 Google Maps Routing 获取数值(距离/持续时间)
- terraform - 使用 terraform 的 Datadog 监视器
- android - 访问 AlertDialog 的布局
- c# - 如何使用 C# WPF 和 EF6 将对象正确添加到 localDB 和 listview?
- java - Java:尝试使用 BufferedReader 读取在同一项目的不同包中导入的文本文件?没有得到这样的文件或目录错误?
- python - Tensorflow:自定义指标:ValueError:不支持无值