r - R用mtcars编程饼图
问题描述
我需要帮助才能使用 mtcars$mpg 和 mtcars$carb 创建饼图。我想做这个; 我想创建一个饼图,显示每个化油器的总 mpg 值。让我解释更多;在饼图中,每个切片会根据总mpg值显示化油器的值(1、2、3、4、6、8)和形状。我写了一些命令,但我怎样才能用这些创建一个 tablo,我应该如何继续?我需要最好的简单方法。请帮我。谢谢...
> carb1 <- filter(mtcars, carb==1)
> carb2 <- filter(mtcars, carb==2)
> carb3 <- filter(mtcars, carb==3)
> carb4 <- filter(mtcars, carb==4)
> carb6 <- filter(mtcars, carb==6)
> carb8 <- filter(mtcars, carb==8)
> summpg_carb1 <- sum(carb1$mpg)
> summpg_carb2 <- sum(carb2$mpg)
> summpg_carb3 <- sum(carb3$mpg)
> summpg_carb4 <- sum(carb4$mpg)
> summpg_carb6 <- sum(carb6$mpg)
> summpg_carb8 <- sum(carb8$mpg)
解决方案
使用ggplot2
和plotly
:
# Install pacakges if they are not already installed: necessary_packages => vector
necessary_packages <- c("ggplot2", "plotly")
# Create a vector containing the names of any packages needing installation:
# new_pacakges => vector
new_packages <- necessary_packages[!(necessary_packages %in%
installed.packages()[, "Package"])]
# If the vector has more than 0 values, install the new pacakges
# (and their) associated dependencies:
if(length(new_packages) > 0){install.packages(new_packages, dependencies = TRUE)}
# Initialise the packages in the session: list of boolean => stdout (console)
lapply(necessary_packages, require, character.only = TRUE)
# Aggregate the data.frame:
agg_df <- transform(aggregate(mpg ~ carb, mtcars, sum),
carb = as.factor(paste(
carb, paste0(round(prop.table(mpg), 4) * 100, "%"),
sep = " - "
)))
# Chart aggregated data.frame:
ggplot(agg_df, aes(x = "", y = mpg, fill = carb)) +
geom_bar(width = 1, stat = "identity") +
scale_fill_viridis_d(option = "viridis") +
coord_polar("y", start = 0) +
ylab("") +
xlab("Total MPG") +
ggtitle("Total MPG by Carburetor") +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank()
)
# Plotly chart:
plot_ly(aggregate(mpg ~ carb, mtcars, sum),
labels = ~sort(carb), values = ~mpg, type = "pie",
marker = list(colors=c("#440154FF", "#404788FF", "#2E6E8EFF", "#20A486FF", "#44BF70FF",
"#FDE725FF", "#20A387FF")),
textinfo = "label+percent",
textposition = "outside") %>%
layout(title = "Total MPG by Carburetor")