r - R:bar ggplot2错误:分面变量必须至少有一个值
问题描述
尝试绘制图表时出现错误。这是错误信息。
'预计 2 件。缺少 1 行中填充的部分NA
[24216]。错误:分面变量必须至少具有一个值'
#Load Libaries
library(ggplot2)
library(dplyr)
options(scipen = 100000)
library(scales)
library(plotly)
library(tidyverse)
#Read dataset
ura <- read.csv('URAdata_new.csv')
#Data cleaning
ura <- ura %>% mutate(Date.of.Sale_month = str_split(ura$Date.of.Sale, '-', simplify = T)[, 1],
Date.of.Sale_year = str_split(ura$Date.of.Sale, '-', simplify = T)[, 2])
#Plotly Graph in issue
Plot2 <- ggplotly(ura %>%
separate(Date.of.Sale, c('Sale_year', 'Sale_month'), sep = '-') %>%
filter(Sale_year %in% c(16, 17) & Postal.District %in% c(2, 5)) %>%
group_by(Sale_year, Postal.District) %>%
summarize(avg_price = mean(Price....)) %>%
ggplot(aes(x = as.character(Postal.District), y = avg_price,
fill = as.factor(Sale_year))) +
geom_col() +
facet_grid(~ as.factor(Sale_year)) +
labs(x = 'Postal District', y = 'Average price',
title = 'Comparison of unit prices in district 2 and 5 between 2016 and 2017') +
scale_fill_discrete(name = "Year of sale", labels = c("2016", "2017"))+
theme(
plot.title = element_text(colour="red",size=10, face="bold.italic",hjust = 0.5),
axis.title.x = element_text(colour="blue",size=14, face="bold"),
axis.title.y = element_text(colour="green",size=14, face="bold"),
legend.title=element_text(size=8))+
scale_y_continuous(name="Average Price",labels = comma), main="foo")
Plot2
这些是我上面的代码。
输入(头(乌拉,20)
structure(list(Project.Name = c("V ON SHENTON", "V ON SHENTON",
"STIRLING RESIDENCES", "PARC CLEMATIS", "STIRLING RESIDENCES",
"ONE PEARL BANK", "TWIN VEW", "WHISTLER GRAND", "WHISTLER GRAND",
"WHISTLER GRAND", "WHISTLER GRAND", "WHISTLER GRAND", "KENT RIDGE HILL RESIDENCES",
"KENT RIDGE HILL RESIDENCES", "KENT RIDGE HILL RESIDENCES", "KENT RIDGE HILL RESIDENCES",
"KENT RIDGE HILL RESIDENCES", "KENT RIDGE HILL RESIDENCES", "KENT RIDGE HILL RESIDENCES",
"STIRLING RESIDENCES"), Street.Name = c("SHENTON WAY", "SHENTON WAY",
"STIRLING ROAD", "JALAN LEMPENG", "STIRLING ROAD", "PEARL BANK",
"WEST COAST VALE", "WEST COAST VALE", "WEST COAST VALE", "WEST COAST VALE",
"WEST COAST VALE", "WEST COAST VALE", "SOUTH BUONA VISTA ROAD",
"SOUTH BUONA VISTA ROAD", "SOUTH BUONA VISTA ROAD", "SOUTH BUONA VISTA ROAD",
"SOUTH BUONA VISTA ROAD", "SOUTH BUONA VISTA ROAD", "SOUTH BUONA VISTA ROAD",
"STIRLING ROAD"), Type = c("Apartment", "Apartment", "Apartment",
"Apartment", "Apartment", "Apartment", "Apartment", "Apartment",
"Apartment", "Apartment", "Apartment", "Apartment", "Apartment",
"Apartment", "Apartment", "Apartment", "Apartment", "Apartment",
"Apartment", "Apartment"), Postal.District = c(1L, 1L, 3L, 5L,
3L, 3L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 3L
), Market.Segment = c("CCR", "CCR", "RCR", "OCR", "RCR", "RCR",
"OCR", "OCR", "OCR", "OCR", "OCR", "OCR", "RCR", "RCR", "RCR",
"RCR", "RCR", "RCR", "RCR", "RCR"), Tenure = c("99 yrs lease commencing from 2011",
"99 yrs lease commencing from 2011", "99 yrs lease commencing from 2017",
"99 yrs lease commencing from 2019", "99 yrs lease commencing from 2017",
"99 yrs lease commencing from 2019", "99 yrs lease commencing from 2017",
"99 yrs lease commencing from 2018", "99 yrs lease commencing from 2018",
"99 yrs lease commencing from 2018", "99 yrs lease commencing from 2018",
"99 yrs lease commencing from 2018", "99 yrs lease commencing from 2018",
"99 yrs lease commencing from 2018", "99 yrs lease commencing from 2018",
"99 yrs lease commencing from 2018", "99 yrs lease commencing from 2018",
"99 yrs lease commencing from 2018", "99 yrs lease commencing from 2018",
"99 yrs lease commencing from 2017"), Type.of.Sale = c("Resale",
"Resale", "New Sale", "New Sale", "New Sale", "New Sale", "New Sale",
"New Sale", "New Sale", "New Sale", "New Sale", "New Sale", "New Sale",
"New Sale", "New Sale", "New Sale", "New Sale", "New Sale", "New Sale",
"New Sale"), No..of.Units = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Price.... = c(3548000L,
3490000L, 1987000L, 1745000L, 1227000L, 1702000L, 1899000L, 704380L,
1129960L, 1145540L, 1473540L, 1421880L, 1367000L, 1360000L, 3000000L,
870000L, 1711000L, 899000L, 870000L, 1249000L), Nett.Price.... = c("-",
"-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-",
"-", "-", "-", "-", "-", "-"), Area..Sqft. = c(1518L, 1518L,
1055L, 1044L, 635L, 700L, 1249L, 441L, 764L, 764L, 990L, 958L,
775L, 786L, 1776L, 484L, 958L, 484L, 484L, 635L), Type.of.Area = c("Strata",
"Strata", "Strata", "Strata", "Strata", "Strata", "Strata", "Strata",
"Strata", "Strata", "Strata", "Strata", "Strata", "Strata", "Strata",
"Strata", "Strata", "Strata", "Strata", "Strata"), Floor.Level = c("46 to 50",
"46 to 50", "26 to 30", "06 to 10", "31 to 35", "21 to 25", "26 to 30",
"21 to 25", "21 to 25", "21 to 25", "31 to 35", "31 to 35", "01 to 05",
"01 to 05", "01 to 05", "01 to 05", "01 to 05", "01 to 05", "01 to 05",
"16 to 20"), Unit.Price...psf. = c(2338L, 2299L, 1884L, 1671L,
1932L, 2433L, 1521L, 1596L, 1479L, 1499L, 1488L, 1484L, 1764L,
1731L, 1689L, 1796L, 1786L, 1856L, 1796L, 1967L), Date.of.Sale = c("20-Jun",
"20-Jun", "20-Jun", "20-Jun", "20-Jun", "20-Jun", "20-Jun", "20-Jun",
"20-Jun", "20-Jun", "20-Jun", "20-Jun", "20-Jun", "20-Jun", "20-Jun",
"20-Jun", "20-Jun", "20-Jun", "20-Jun", "20-Jun")), row.names = c(NA,
20L), class = "data.frame")
谷歌表格链接:https ://docs.google.com/spreadsheets/d/1QFXNUpgEjjPGdfXUwvzYIadnoxcD2-Ba6cw6BqrxfO8/edit
解决方案
您不需要同时运行str_split
代码和separate
代码,只运行其中一个。
library(tidyverse)
library(plotly)
ura <- read.csv('URA Dataset - URAdata_new.csv')
ggplotly(ura %>%
separate(Date.of.Sale, c('Sale_year', 'Sale_month'), sep = '-') %>%
filter(Sale_year %in% c(16, 17) & Postal.District %in% c(2, 5)) %>%
group_by(Sale_year, Postal.District) %>%
summarize(avg_price = mean(Price....)) %>%
ggplot(aes(x = as.character(Postal.District), y = avg_price,
fill = as.factor(Sale_year))) +
geom_col() +
facet_grid(~ as.factor(Sale_year)) +
labs(x = 'Postal District', y = 'Average price',
title = 'Comparison of unit prices in district 2 and 5 between 2016 and 2017') +
scale_fill_discrete(name = "Year of sale", labels = c("2016", "2017"))+
theme(
plot.title = element_text(colour="red",size=10, face="bold.italic",hjust = 0.5),
axis.title.x = element_text(colour="blue",size=14, face="bold"),
axis.title.y = element_text(colour="green",size=14, face="bold"),
legend.title=element_text(size=8))+
scale_y_continuous(name="Average Price",labels = comma), main = 'foo')
推荐阅读
- linux - 如何使用 ftrace 仅跟踪系统调用事件而不显示 Linux 内核中的任何其他功能?
- sql - 如何在 SQL Server 中转换一个奇怪的日期字符串?
- cron - 每个月的前 7 天每 30 分钟运行一次,之后每两小时运行一次的 Cron 调度表达式
- python - Python Pandas - 有条件地覆盖另一个数据框中的 x 行
- ios - Xcode9 的 UI 对齐问题适用于 xcode 6
- oracle - ORA-01403: 在自动行提取中找不到数据
- r - 使用 ggplot2 绘制密度图
- sql - 使用 T-SQL 检索具有许多场景的字符串的一部分
- java - AdMob 直销广告未展示
- windows - 本地 git clone 在特定机器上不起作用