ggplot 在图例中给出小数值,而列具有数值

问题描述 投票:0回答:1

plt <- ggplot(data=a,mapping=aes(x=distance, y=rate)) +
    geom_point(aes(size=as.numeric(`Number of years of data`),color=Trend))

“数据年数”列的值为 17 和 18,而图例显示的是十进制值。 我原以为情节只有两个值,即 17 和 18 为了解决这个问题,我尝试了 as.numeric 但没有用。

r ggplot2 decimal size legend
1个回答
1
投票

ggplot2
使用一些启发式方法来确定连续变量中的有用中断。在您的情况下,您知道 17 和 18 是唯一的值,但 ggplot2 猜测 17.25 也可能是要显示的数据范围内的一个有用点。在引擎盖下,我相信它使用
scales::breaks_extended()
scales::breaks_pretty()
来寻找导致 5-ish 中断的精度。

在这种情况下,如果我们想推翻该默认设置,我们有几个选择。

我们以公开数据为例:

ggplot(mtcars, aes(wt, mpg, size = gear)) + 
  geom_point() 

这里我们有三个连续变量。

mpg
从 10:35 开始有休息时间标签,有 6 次休息时间,每次休息 5 次。
wt
显示为从 2 到 5,每 1 个间隔 4 个间隔。
gear
的范围为 3:5,显示为 5 个间隔,每个间隔 0.5。在这种情况下,我们知道汽车不能有 3.5 个齿轮,但 ggplot2 无法固有地知道
gear
应该只是整数值——它“假设”所有数字变量都是连续的(即使它们的类型是整数) .

一个选项是我们自己指定休息时间:

ggplot(mtcars, aes(wt, mpg, size = gear)) + 
  geom_point() +
  scale_size_continuous(breaks = scales::breaks_width(1))

另一种选择是将变量设为

character
factor
数据,以便 ggplot2 将其视为离散数据,在数据中找到的每个值都有一个图例值。
factor
通常是可取的,因为它可以保持原来的顺序;
character
将显示“100”,就好像它小于“90”一样,因为它按字母顺序排在前面。在任何一种情况下,您都会失去映射数字数据时可以实现的比例。

ggplot(mtcars, aes(wt, mpg, size = as.factor(gear))) + 
  geom_point() 

© www.soinside.com 2019 - 2024. All rights reserved.