首页 > 解决方案 > geom_jitter 更小​​ 增加点大小

问题描述

我试图在我的箱线图中每年绘制一些人作为一个点,点的大小作为年龄。当我不写 size=Pnr$Alterpunkt 时(这是我根据年龄保存点大小的列。对于 15 岁的人来说就像 0.1,对于 16 岁的人来说是 0.2 等等。)在aes 它看起来很完美,但是我没有传奇,我想拥有一个。如果我把它写进aes,点会变得更大,这看起来不太好,因为我有很多点。

然后它看起来像这样:

在此处输入图像描述

我已经尝试将形状设置为“。” 或行程=0。我也尝试使用 guide_legend,但似乎没有任何改变

这是情节的代码:

q <- ggplot(Pnr, aes(group=year, x=year, y=Ges))
q <- q + geom_boxplot(outlier.shape = NA)
q <- q + scale_x_continuous(breaks = c(2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,
                                       2015,2016,2017,2018,2019,2020))
q <- q + scale_y_continuous(limits = c(-1000,10000))
q <- q + theme(legend.position = c(0.3, 0.3),
               legend.direction = "horizontal", 
               legend.background = element_rect(fill = "white", colour = NA), 
               legend.title=element_blank(), 
               panel.background = element_rect(fill="white", colour="darkgrey", linetype="solid"),
               panel.grid.major = element_line(colour="lightgrey", size=0.1, linetype="solid"),
               panel.grid.minor = element_line(colour="lightgrey", size=0.1, linetype="solid"),
               strip.background = element_rect(fill="lightgrey", colour = "darkgrey"))
q <- q + geom_jitter(aes(size=Pnr$Alterpunkt, shape="."), show.legend = T)

我想让它看起来像这样,但有一个传说

在此处输入图像描述

我希望有人能帮助我。

标签: rggplot2

解决方案


如果没有您的数据示例,很难知道如何专门提供帮助。以下是一些建议,希望对您有所帮助:

  • geom_jitter(aes(size=Alterpunkt)...而不是geom_jitter(aes(size=Pnr$Alterpunkt, shape="."),因为使用$内部 ggplot 调用可能会导致错误,并且该形状调用应该在 之外(aes()如果有的话)。

  • 使用scale_size_area(max_size =...)scale_size_continuous(range = c(...))定义点的大小。根据您的审美目标,您可以应用转换来调整尺寸随着基础变量的变化而变化的方式。在下面的案例中,我喜欢使用的外观trans = scales::exp_trans(base = 1.1)——这使得大点比中型点大得多,但没有显着大。调整口味。

这是一个例子: 在此处输入图像描述

library(gapminder)
library(tidyverse)

fake_df <- gapminder %>%
  mutate(age = (lifeExp - 23.5)*1.7,
         Ges = (gdpPercap/1000)^0.5) %>%
  select(continent, year, age, Ges)

q <- ggplot(fake_df, aes(group=year, x=year, y=Ges))
q <- q + geom_boxplot(outlier.shape = NA)
q <- q + scale_x_continuous(breaks = seq(1950, 2020, 10))
# q <- q + scale_y_continuous(limits = c(-1000,10000))
q <- q + theme(legend.position = c(0.3, 0.6),
               legend.direction = "horizontal", 
               legend.background = element_rect(fill = "white", colour = NA), 
               legend.title=element_blank(), 
               panel.background = element_rect(fill="white", colour="darkgrey", linetype="solid"),
               panel.grid.major = element_line(colour="lightgrey", size=0.1, linetype="solid"),
               panel.grid.minor = element_line(colour="lightgrey", size=0.1, linetype="solid"),
               strip.background = element_rect(fill="lightgrey", colour = "darkgrey"))
q <- q + geom_jitter(aes(size=age), show.legend = T) +
  scale_size_continuous(range = c(0.01, 1.5), 
                        trans = scales::exp_trans(base = 1.2),
                        breaks = c(1, 80, 100))
q

推荐阅读