Moja firma chce robić raporty w R, chcą zachować tak dużo raportu Excel tak jak to możliwe. Czy jest jakiś sposób w ggplot2, aby utrzymać wygląd trójwymiarowy w Excelu? Ja chce zrobić wykres, który wygląda jak to, co jest poniżej:Grafika Excel z ggplot2
udało mi się zbliżyć. Oto, co mam do tej pory:
gender <- c("Male", "Male", "Female", "Male", "Male", "Female", "Male", "Male", "Female", "Male",
"Male", "Female")
race <- c("African American", "Caucasian", "Hispanic", "African American", "African American",
"Caucasian", "Hispanic", "Other", "African American", "Caucasian", "African American",
"Other")
data <- as.data.frame(cbind(gender, race))
gender_data <- data %>%
count(gender = factor(gender)) %>%
ungroup() %>%
mutate(pct = prop.table(n))
race_data <- data %>%
count(race = factor(race)) %>%
ungroup() %>%
mutate(pct = prop.table(n))
names(race_data)[names(race_data) == 'race'] <- 'value'
names(gender_data)[names(gender_data) == 'gender'] <- 'value'
# Function for fixing x axis that creeps into other values
addline_format <- function(x,...){
gsub('\\s','\n',x)
}
ggplot() +
geom_bar(stat = 'identity', position = 'dodge', fill = "#5f1b46",
aes(x = gender_data$value, y = gender_data$pct)) +
geom_bar(stat = 'identity', position = 'dodge', fill = "#3b6b74",
aes(x = race_data$value, y = race_data$pct)) +
geom_text(aes(x = gender_data$value, y = gender_data$pct + .03,
label = paste0(round(gender_data$pct * 100, 0), '%')),
position = position_dodge(width = .9), size = 5) +
geom_text(aes(x = race_data$value, y = race_data$pct + .03,
label = paste0(round(race_data$pct * 100, 0), '%')),
position = position_dodge(width = .9), size = 5) +
scale_x_discrete(limits = c("Male", "Female", "African American", "Caucasian", "Hispanic", "Other"),
breaks = unique(c("Male", "Female", "African American", "Caucasian", "Hispanic",
"Other")),
labels = addline_format(c("Male", "Female", "African American", "Caucasian",
"Hispanic", "Other"))) +
labs(x = '', y = '') +
scale_y_continuous(labels = scales::percent,
breaks = seq(0, 1, .2)) +
expand_limits(y = c(0, 1)) +
theme(panel.grid.major.x = element_blank() ,
panel.grid.major.y = element_line(size=.1, color="light gray"),
panel.background = element_rect(fill = '#f9f3e5'),
plot.background = element_rect(fill = '#f9f3e5'))
Dane wyjściowe są poniżej, w tym miejscu każda pomoc byłaby doceniana. Ja też trzeba umieścić spację między polami płeć i rasa, czy ktoś może pomóc w tym również:
Możesz mieć więcej szczęścia w kratowaniu: https://stackoverflow.com/a/26822348/1412059 Ale kto chciałby odtworzyć tak okropny spisek? To tak, jakby jechać Teslą i chcieć mieć niebieską chmurę wychodzącą z tyłu. – Roland
Nie pozwól, aby @hadley to zobaczył, może mieć tętniaka. – tkmckenzie
[Moja Tesla z _green_ smoke] (https://stackoverflow.com/a/19943527/1851712). Przepraszamy za skrzywienie oczu @Roland, hadley .et al. Zobacz także [theme_excel] (https://cran.r-project.org/web/packages/ggthemes/vignettes/ggthemes.html) "_ dla tego klasycznego, brzydkiego wyglądu i stylu". – Henrik