Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
95 views
in Technique[技术] by (71.8m points)

r - Making my plotly graph display more aesthetic

I wanted to improve the display of my values in my plotly graph. There is a problem when I mouse over the graph, it displays the information of the particular chart in a way that is not desirable.

This can be explained using an attached image of my chart.

enter image description here

As seen from the chart, it displays my information in the following format:

Type.of.Sale: Resale, avg_price: 2166504, Type.of.Sale: Resale

How can I make changes to its information display to be in this format for all three colored charts:

Type of Sale: Resale, Avg Price: 2,166,504, Type of Sale: Resale

I have reason to believe that the display that I have now is due to my default column names when I first load in the data, hence I want to reformat my original data column names from this "Type.of.Sale" to Type of Sale.

I have attached my code and where can I make changes to it.

#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")

Full Data Google Sheet link: https://docs.google.com/spreadsheets/d/1QFXNUpgEjjPGdfXUwvzYIadnoxcD2-Ba6cw6BqrxfO8/edit

question from:https://stackoverflow.com/questions/65866436/making-my-plotly-graph-display-more-aesthetic

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Since your data has non-standard column names, the spaces are replaced with dots (.). You can correct that by using check.names = FALSE while using read.csv.

However, I think a better approach is to use text in aes and build up a string that you want to show on hover.

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')

enter image description here


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...