我正在尝试为数据框中的每个数字变量做一个箱线图和一个密度图。我正在调整this解决方案来解决我的问题。但是,我正在尝试为数据框中的每个数字变量绘制图表(上面的解决方案中仅针对一个变量):
df %>%
select_if(is.numeric) %>%
gather(na.rm=TRUE) %>%
ggplot(aes(x = value, y = -0.5)) +
geom_boxploth() +
geom_density(aes(x = value), inherit.aes = FALSE) +
facet_wrap(~key, scales = 'free')
主要问题在于每个变量的标度。我在free_x
的{{1}}参数中尝试了free_y
,free
和scales
,它们全都给我带来了一些美学上的问题:
facet_wrap()
:箱形图的宽度在图中发生变化,使其变得凌乱。scales="free"
:情节几乎是完美的,唯一的问题
依赖于某些密度图不可读。 scales="free_x"
:最糟糕的一个。由于数字变量的范围非常不同,因此x轴需要自由,以便绘制可理解的箱线图。但是,如果我固定y轴(使用scales="free_y"
,则密度图(例如scales="free_x"
的峰)将显示为固定轴上从0到1的直线({{ 1}}变量)。
我获得的最接近的解决方案是使用0.1
,但是我无法使密度图更具可读性。
有什么建议吗?
数据(100行):
air_temperature
答案 0 :(得分:1)
geom_density()
,或更准确地说stat_density()
也可以使计算机具有美学价值。使用这些,您可以设置geom_density(aes(x = value, y = stat(density)))
以获得统一的内核密度估计值:
df %>%
select_if(is.numeric) %>%
gather(na.rm=TRUE) %>%
ggplot(aes(x = value, y = -0.5)) +
geom_boxploth() +
geom_density(aes(x = value, y = stat(scaled)), inherit.aes = FALSE) +
facet_wrap(~key, scales = 'free')
这可以解决轴的问题。
值得注意的是,由于this pull request的合并,将来我们似乎不再需要更多的ggstance。