#r #ggplot2 #plotly
#r #ggplot2 #графическое отображение
Вопрос:
Я хотел улучшить отображение моих значений в моем графическом графике. При наведении курсора мыши на график возникает проблема, при которой информация о конкретной диаграмме отображается нежелательным образом.
Это можно объяснить, используя прикрепленное изображение моей диаграммы.
Как видно из диаграммы, она отображает мою информацию в следующем формате:
Type.of.Sale: Перепродажа, средняя цена: 2166504, Type.of.Sale: Перепродажа
Как я могу внести изменения в его информационное отображение, чтобы оно было в этом формате для всех трех цветных диаграмм:
Тип продажи: перепродажа, средняя цена: 2 166 504, Тип продажи: перепродажа
У меня есть основания полагать, что отображение, которое у меня есть сейчас, связано с моими именами столбцов по умолчанию при первой загрузке данных, поэтому я хочу переформатировать мои исходные имена столбцов данных из этого «Type.of.Sale» в Тип продажи.
Я прикрепил свой код и где я могу внести в него изменения.
#Load Libaries
library(ggplot2)
library(dplyr)
options(scipen = 100000)
library(scales)
library(stringr)
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
Plot1<-ggplotly(ura %>%
group_by(Type.of.Sale) %>%
summarize(avg_price = mean(Price....)) %>%
ggplot(aes(x = Type.of.Sale, y = avg_price, fill = Type.of.Sale))
geom_col()
labs(x = 'Type of sale',
y = 'Average price',
title = 'Average price across different types of sales')
scale_fill_discrete(name = "Type of sale",
labels = c("New Sale", "Resale", "Sub Sale"))
theme(plot.title = element_text(colour="red",size=14, 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"))
scale_y_continuous(name="Average Price",labels = scales::comma, limits = c(0, 2500000)))
Plot1
dput(head(ura,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")
Ссылка на Google Sheet с полными данными: https://docs.google.com/spreadsheets/d/1QFXNUpgEjjPGdfXUwvzYIadnoxcD2-Ba6cw6BqrxfO8/edit
Ответ №1:
Поскольку ваши данные имеют нестандартные имена столбцов, пробелы заменяются точками ( .
). Вы можете исправить это, используя check.names = FALSE
во время использования read.csv
.
Тем не менее, я думаю, что лучшим подходом является использование text
aes
и создание строки, которую вы хотите отобразить при наведении курсора мыши.
library(dplyr)
library(ggplot2)
library(plotly)
library(scales)
#Plotly Graph in issue
Plot1<- ura %>%
group_by(Type.of.Sale) %>%
summarize(avg_price = mean(Price....)) %>%
ggplot(aes(x = Type.of.Sale, y = avg_price, fill = Type.of.Sale,
text = sprintf('Type of Sale: %s<br>Avg Price: %s<br> Type of Sale: %s', Type.of.Sale, comma(avg_price), Type.of.Sale)))
geom_col()
labs(x = 'Type of sale',
y = 'Average price',
title = 'Average price across different types of sales')
scale_fill_discrete(name = "Type of sale",
labels = c("New Sale", "Resale", "Sub Sale"))
theme(plot.title = element_text(colour="red",size=14, 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"))
scale_y_continuous(name="Average Price",labels = scales::comma, limits = c(0, 2500000))
ggplotly(Plot1, tooltip = 'text')
Комментарии:
1. Спасибо за быстрый и полезный ответ. Могу я спросить, знакомы ли вы также с R Markdown html? У меня возникают проблемы с этим, поскольку мой график графика обрезается. Я опубликовал его как еще один новый вопрос, и если бы вы могли любезно помочь с этим, я был бы благодарен и благодарен