Чтобы просмотреть размер диаграммы p ie по отношению к ее рамке и другим элементам в R - PullRequest
1 голос
/ 17 июня 2020

Запустив этот код,

g <- ggplot(results_table, aes(x = "", y =Pct*100, 
           fill = factor(results_table$Criteria, as.character(results_table$Criteria))),width = 0.5) +
  geom_bar(stat = "identity") +
  scale_color_manual(values = Palcolor) +
  scale_fill_manual(values = Palcolor) +
  coord_polar(theta = "y", start = 0, direction = -1) +
  theme_minimal() + 
  theme(legend.position = "bottom", legend.title=element_blank(), axis.title.x = element_blank(),, 
        axis.title.y = element_blank(), panel.border = element_blank(), panel.grid = element_blank(),
        axis.text = element_blank(), axis.ticks = element_blank(), 
        plot.title = element_text(size = 14, hjust = 0.5, vjust = 0)) + 
  guides(fill = guide_legend(nrow = 4, byrow = TRUE)) + 
  theme(
    legend.key.height = unit(0.3, "lines"), #smaller squares
    legend.key.width = unit(0.7, "lines"), #smaller squares
    legend.margin=margin(l = 40, unit='pt'),
    legend.text = element_text(margin = margin(r = 60, unit = "pt"))) +
  xlab("") +  
  ylab("") + 
  geom_text(aes(x = 1.65, y = 100-(Pct*100/2 + c(0, cumsum(Pct*100)[-length(Pct*100)])),
                label = paste0(sprintf("%0.1f", round(Pct*100, digits = 1)),"%")),
            size = 3.2) +
  labs(title = gTitle) 

мы получим следующее изображение:

enter image description here

Звучит p ie как маленький, и я хотел бы его увеличить, а остальное должно остаться прежним (например, уменьшив расстояние между p ie и его легендой).

1 Ответ

1 голос
/ 17 июня 2020

Просто изменив размер окна графика с вашим точным кодом, я получу следующее:

enter image description here

С парой небольших настроек, в частности, верхнее поле поля легенды отрицательное значение, я получаю это:

ggplot(results_table, aes(x = "", y = Pct*100, 
           fill = factor(Criteria, as.character(Criteria))), width = 0.5) +
  geom_bar(stat = "identity") +
  geom_text(aes(x = 1.65, 
                y = 100-(Pct * 50 + c(0, cumsum(Pct*100)[-length(Pct*100)])),
                label = paste0(sprintf("%0.1f", round(Pct*100, digits = 1)),"%")),
            size = 3.2) +
  scale_color_manual(values = Palcolor) +
  scale_fill_manual(values = Palcolor) +
  coord_polar(theta = "y", start = 0, direction = -1) +
  theme_minimal() + 
  theme(legend.position   = "bottom", 
      legend.title      = element_blank(), 
      axis.title.x      = element_blank(),
      axis.title.y      = element_blank(), 
      panel.border      = element_blank(), 
      panel.grid        = element_blank(),
      axis.text         = element_blank(), 
      axis.ticks        = element_blank(), 
      plot.title        = element_text(size = 14, hjust = 0.5, vjust = -10),
      plot.margin       = margin(-50, 0, -20, 0),
      legend.key.height = unit(0.3, "lines"), 
      legend.key.width  = unit(0.7, "lines"),
      legend.box.margin = margin(t = -80, b = 0, l = 40, unit='pt'),
      legend.text       = element_text(margin = margin(r = 60, unit = "pt"))) +
  guides(fill = guide_legend(nrow = 4, byrow = TRUE)) + 
  labs(title = gTitle)

Я получил это:

enter image description here


Данные получены из вопроса

results_table <- structure(list(Pct = c(0.627, 0.119, 0.09, 0.06, 0.06, 0.03, 
  0.015), Criteria = structure(c(2L, 4L, 1L, 5L, 6L, 3L, 7L), 
  .Label = c("Above Market (60th to 74th Percentile)", 
  "At Market (50th Percentile)", "Below Market (44th Percentile or Lower)", 
  "No Policy", "Slightly Above Market (51st to 59th Percentile)", 
  "Slightly Below Market (45th to 49th Percentile)", 
  "Well Above Market (75th Percentile or Higher)"), class = "factor")), 
  row.names = c(1L, 5L, 2L, 6L, 3L, 7L, 4L), class = "data.frame")

Palcolor <-  c("#702082", "#00a0d2", "#00c389", "#63666a", 
               "#c110a0", "#ffb81c", "#be57d5")

gTitle <- "Market Positioning of Annual Base Salary for Sales\nEmployees"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...