首页 > 解决方案 > 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)

标签: rpie-chartrgui

解决方案


使用ggplot2plotly

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

推荐阅读