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 但没有用。
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()