我想在我的图例中添加百分比(四舍五入到 1 位小数)。 例如,“MSFT 8.3%”。 我不希望它们出现在饼图中,因为当有太多带有小 % 值的切片时,它看起来很奇怪。
这是我的代码:
library(ggplot2)
tickers <- c("msft","xic.to","fb","aapl","goog","nflx","aal","bmo","xef.to","xec.to","vsp.to","mcd")
Weights <- rep(1/12*100,12)
tickers <- tickers[order(Weights)]; Weights <- sort(Weights)
tickers.factor <- factor(tickers, levels = as.character(tickers))
ypos <- cumsum(Weights) - 0.5*Weights
ypos <- 100 - ypos
ggplot() + theme_bw() +
geom_bar(aes(x = "", y = Weights, fill = tickers.factor),
stat = "identity", color = "white") +
coord_polar("y", start = 0) +
ggtitle("Portfolio Weights") +
theme(plot.title = element_text(hjust = 0.5, size = 20),
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank(),
panel.border = element_blank()) +
guides(fill = guide_legend(reverse = TRUE)) +
#scale_fill_brewer(palette = "PiYG", name = "Tickers") +
theme(legend.text = element_text(size = 12),
legend.title = element_text(hjust = 0.5, size = 15),
legend.key.size = unit(0.8,"cm"))
谢谢
答案 0 :(得分:1)
我使用 scales::percent 来格式化百分比。
library(ggplot2)
tickers <- c("msft","xic.to","fb","aapl","goog","nflx","aal","bmo","xef.to","xec.to","vsp.to","mcd")
Weights <- rmultinom(n = 1, size = 100, prob = rep(1/length(tickers), length(tickers)))
tickers <- tickers[order(Weights)]; Weights <- sort(Weights)
Percent <- factor(paste(tickers, scales::percent(Weights/100, accuracy = 0.01)), paste(tickers, scales::percent(Weights/100, accuracy = 0.01)))
ypos <- cumsum(Weights) - 0.5*Weights
ypos <- 100 - ypos
ggplot() + theme_bw() +
geom_bar(aes(x = "", y = Weights, fill = Percent),
stat = "identity", color = "white") +
coord_polar("y", start = 0) +
ggtitle("Portfolio Weights") +
theme(plot.title = element_text(hjust = 0.5, size = 20),
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank(),
panel.border = element_blank()) +
guides(fill = guide_legend(reverse = TRUE)) +
#scale_fill_brewer(palette = "PiYG", name = "Tickers") +
theme(legend.text = element_text(size = 12),
legend.title = element_text(hjust = 0.5, size = 15),
legend.key.size = unit(0.8,"cm"))
答案 1 :(得分:0)
这是一种解决方案:
library(tidyverse)
tickers <- c("msft","xic.to","fb","aapl","goog","nflx","aal","bmo","xef.to","xec.to","vsp.to","mcd")
Weights <- rep(1/12*100,12)
# Combine tickers and weights
tickers_and_weights <- paste(tickers, paste(round(Weights, 1), "%", sep = ""))
# Convert to a factor
`Tickers and Weights` <- factor(tickers_and_weights, levels = tickers_and_weights)
ypos <- cumsum(Weights) - 0.5*Weights
ypos <- 100 - ypos
ggplot() + theme_bw() +
geom_bar(aes(x = "", y = Weights, fill = `Tickers and Weights`),
stat = "identity", color = "white") +
coord_polar("y", start = 0) +
ggtitle("Portfolio Weights") +
theme(plot.title = element_text(hjust = 0.5, size = 20),
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank(),
panel.border = element_blank()) +
#guides(fill = guide_legend(reverse = TRUE)) +
#scale_fill_brewer(palette = "PiYG", name = "Tickers") +
theme(legend.text = element_text(size = 12),
legend.title = element_text(hjust = 0.5, size = 15),
legend.key.size = unit(0.8,"cm"))