如何在r ggplot中为dotplot选择正确的参数

时间:2018-05-18 10:23:59

标签: r ggplot2

我打算做一个像这样的点图:

enter image description here

但代码存在一些问题:

df = data.frame(x=runif(100))

df %>%
  ggplot(aes(x )) + 
  geom_dotplot(binwidth =0.01, aes(fill = ..count..), stackdir = "centerwhole",dotsize=2, stackgroups = T, binpositions = "all") 

如何选择纸盒宽度以避免点重叠,将纸盒自身包裹在2列或点中的纸盒会在顶部和底部被截断?

为什么y轴显示小数点而不是计数?以及如何用x值对点进行着色?我试过fill = x并且没有显示颜色。

2 个答案:

答案 0 :(得分:3)

首先在?geom_dotplot

的帮助下
  

沿x轴进行装箱并沿y轴堆叠时,   由于技术限制,y轴上的数字没有意义   GGPLOT2。您可以隐藏y轴,如其中一个示例所示,或   手动缩放它以匹配点数。

因此你可以尝试以下。注意,着色不完全符合x轴。

library(tidyverse)
df %>%
  ggplot(aes(x)) + 
  geom_dotplot(stackdir = "down",dotsize=0.8,
               fill = colorRampPalette(c("blue", "white", "red"))(100)) +
  scale_y_continuous(labels = c(0,10), breaks = c(0,-0.4)) +
  scale_x_continuous(position = "top") +
  theme_classic()

enter image description here

要获得正确的颜色,您必须自己使用例如计算垃圾箱。 .bincode

df %>% 
  mutate(gr=with(.,.bincode(x ,breaks = seq(0,1,1/30)))) %>% 
  mutate(gr2=factor(gr,levels = 1:30, labels = colorRampPalette(c("blue", "white", "red"))(30))) %>% 
  arrange(x) %>% 
  {ggplot(data=.,aes(x)) + 
      geom_dotplot(stackdir = "down",dotsize=0.8,
                   fill = .$gr2) +
      scale_y_continuous(labels = c(0,10), breaks = c(0,-0.4)) +
      scale_x_continuous(position = "top") +
      theme_classic()}

enter image description here

答案 1 :(得分:3)

重叠是由dotsize>引起的。 1;正如@Jimbuo所说,y轴上的十进制值是由于这个geom的内部结构;对于fillcolor,您可以使用..x..计算变量:

  

计算变量

     

x 每个垃圾箱的中心,如果binaxis是" x"

df = data.frame(x=runif(1000))
library(dplyr)
library(ggplot2)

df %>%
        ggplot(aes(x, fill = ..x.., color = ..x..)) + 
        geom_dotplot(method = 'histodot',
                     binwidth = 0.01, 
                     stackdir = "down",
                     stackgroups = T, 
                     binpositions = "all") +
        scale_fill_gradientn('', colours = c('#5185FB', '#9BCFFD', '#DFDFDF', '#FF0000'), labels = c(0, 1), breaks = c(0,1), guide = guide_legend('')) +
        scale_color_gradientn(colours = c('#5185FB', '#9BCFFD', '#DFDFDF', '#FF0000'), labels = c(0, 1), breaks = c(0,1), guide = guide_legend('')) +
        scale_y_continuous() +
        scale_x_continuous('', position = 'top') +
        # coord_equal(ratio = .25) +
        theme_classic() +
        theme(axis.line = element_blank(),
              axis.text.y = element_blank(),
              axis.ticks = element_blank(),
              aspect.ratio = .25,
              legend.position = 'bottom',
              legend.direction = 'vertical'
              )

reprex package(v0.2.0)创建于2018-05-18。