R语言 是否有更好的方法来可视化这两个离散变量的数据[已关闭]

ejk8hzay  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(130)

**已关闭。**此问题正在寻求有关书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines准则。当前不接受答案。

我们不允许问题寻求有关书籍、工具、软件库等的推荐。你可以编辑问题,以便可以使用事实和引用来回答问题。
昨天关门了。
Improve this question
所以我有这段代码来可视化一个数据集(hadley),它包含了一段时间内美国名字流行度的数据。我想找到最好的可视化方法。我也想知道我现有的数据到底出了什么问题。

library(babynames)

hadley <- dplyr::filter(babynames, name == "Hadley")

ggplot(hadley, aes(year, n)) +
  geom_line()

生成的线图:

fxnxkyjh

fxnxkyjh1#

你可以做一些事情来改进图表。例如,我不会使用线,而是使用列,这样就不会给予人一种多年插值的错误印象。此外,你可以按性别进行区分,以表明增长主要是由于给男性起的名字。

library(babynames)    
library(dplyr)
library(ggplot2)

ggplot(babynames %>% filter(name == "Hadley"), aes(x = year, y = n, fill = sex)) + 
  geom_col() + 
  scale_y_continuous(labels = function(x) format(x, big.mark = ",", scientific = FALSE)) +
  theme_minimal() + 
  facet_wrap(~sex, ncol = 1,)

我还添加了数千个分隔符。然而,如果没有对问题的精确描述,就很难理解你所看到的“改进”。

bkhjykvo

bkhjykvo2#

为了更好地比较男性和女性在一段时间内的死亡率,我可能会在这里绘制一个镜像条形图,我会将数据限制在两种性别的数据都可用的时间段内,并可能使用对数标尺进行更好的比较:

library(ggplot2)
library(babynames)

hadley <- dplyr::filter(babynames, name == "Hadley")

ggplot(hadley, aes(log10(n) * ifelse(sex == 'F', -1, 1), year, fill = sex)) +
  geom_col(orientation = 'y', color = 'white', linewidth = 0.5) +
  geom_vline(xintercept = 0) +
  scale_x_continuous(NULL, breaks = -3:3, labels = ~scales::comma(10^abs(.x))) +
  coord_cartesian(ylim = c(1966, 2020), xlim = c(-3.5, 3.5))  +
  scale_y_continuous(breaks = 197:202 * 10) +
  scale_fill_manual(values = c('orange', 'deepskyblue4')) +
  theme_minimal(base_size = 16) +
  theme(legend.position = 'top', 
        plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5)) +
  ggtitle('Babies called Hadley 1965 - Present', subtitle = '(log scale)')

相关问题