Как сделать текст в ggplot более читабельным - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь смоделировать график, подобный картинке, как мне сделать белый текст моего графика более читабельным, как на картинке ниже.

Изображение, которое я смоделировал:

enter image description here

Мой участок:

enter image description here

Мой код:

# remotes::install_github("GuangchuangYu/nCov2019")
# get COVID-19 data
require(nCov2019)
y = load_nCov2019(lang = 'zh')
d = y['global']

# filter data
require(dplyr)

dd <- filter(d, time == time(y) & country != '中国') %>% 
  arrange(desc(cum_confirm))

dd = dd[1:40, ]
dd$country = factor(dd$country, levels = dd$country)

dd$angle = 1:40*360/40

# plot data
require(ggplot2)

 ggplot(dd, aes(country, cum_confirm, fill = cum_confirm)) +
  geom_col(width = 1, color = 'grey90') +
  geom_col(aes(y = I(2)), width = 1, fill = 'white') +
  scale_y_log10()+
  scale_fill_gradientn(colours = c('darkgreen', 'green', 'orange', 'firebrick', 'red'), trans = 'log') +
  geom_text(aes(label = paste(country, cum_confirm, sep = '\n'),
                y = cum_confirm*0.8, angle = angle),
            data = function(d) d[d$cum_confirm > 100,],
            color = 'white', fontface = 'bold', vjust = 1)+
  geom_text(aes(label = paste0(cum_confirm, " ", country),
                y = cum_confirm*5, angle = angle + 90),
            data = function(d) d[d$cum_confirm < 100,],
            vjust = 0) +
  coord_polar(direction = -1) +
  theme_void()+
  theme(legend.position = "none")



Ответы [ 2 ]

2 голосов
/ 14 марта 2020

Это часто случается со мной. Я обычно использую quartz () и затем сохраняю свои выводы с очень большими размерами 12x12, 15x15, et c. Любопытно, поможет ли это.

1 голос
/ 14 марта 2020

Используйте устройство в соответствии с желаемым форматом вывода (pdf, png и c.). Из-за специальных символов я использую устройство cairo_pdf, но с вашими настройками использование только устройства pdf также может работать нормально. Имея ту длину меток, которая у вас есть, вам нужно сыграть лот с настройками вывода ...

gg_ncov <- ggplot(dd, aes(country, cum_confirm, fill = cum_confirm)) +
  geom_col(width = 1, color = 'grey90') +
  geom_col(aes(y = I(2)), width = 1, fill = 'white') +
  scale_y_log10()+
  scale_fill_gradientn(colours = c('darkgreen', 'green', 'orange', 'firebrick', 'red'), trans = 'log') +
  geom_text(aes(label = paste(country, cum_confirm, sep = '\n'),
                y = cum_confirm*0.8, angle = angle),
            data = function(d) d[d$cum_confirm > 100,],
            color = 'white', fontface = 'bold', vjust = 1)+
  geom_text(aes(label = paste0(cum_confirm, " ", country),
                y = cum_confirm*5, angle = angle + 90),
            data = function(d) d[d$cum_confirm < 100,],
            vjust = 0) +
  coord_polar(direction = -1) +
  theme_void()+
  theme(legend.position = "none")

cairo_pdf("./graph_ncov.pdf", width = 21, height = 21)
gg_ncov
dev.off()
...