ggMarginal忽略choord_cartesian。如何改变边际尺度?

时间:2017-07-21 08:17:54

标签: r ggplot2

我正在尝试使用ggplot绘制2D密度图,并添加边缘直方图。问题是多边形渲染是愚蠢的,需要额外填充以渲染超出轴限制的值(例如,在这种情况下,我将限制设置在0和1之间,因为超出此范围的值没有物理意义)。我仍然想要密度估计,因为它通常比块状的热图更清洁。

除了完全废弃ggMarginal并花费另外50行代码试图对齐直方图之外,还有解决这个问题的方法吗?

难看的线条

enter image description here

现在渲染工作,但ggMarginal忽略choord_cartesian(),这会拆除情节:

enter image description here 这里的数据: http://pasted.co/b581605a

dataset <- read.csv("~/Desktop/dataset.csv")

library(ggplot2)
library(ggthemes)
library(ggExtra)
plot_center <- ggplot(data = dataset, aes(x = E,
                                          y = S)) +
    stat_density2d(aes(fill=..level..),
                   bins= 8, 
                   geom="polygon",
                   col = "black",
                   alpha = 0.5) + 
    scale_fill_continuous(low = "yellow",
                          high = "red") +
    scale_x_continuous(limits = c(-1,2)) + # Render padding for polygon
    scale_y_continuous(limits = c(-1,2)) + #
    coord_cartesian(ylim = c(0, 1),
                    xlim = c(0, 1)) +
    theme_tufte(base_size = 15, base_family = "Roboto") +
    theme(axis.text    = element_text(color = "black"),
          panel.border = element_rect(colour = "black", fill=NA, size=1),
          legend.text  = element_text(size = 12, family = "Roboto"),
          legend.title = element_blank(),
          legend.position = "none")

ggMarginal(plot_center,
           type = "histogram",
           col = "black",
           fill = "orange",
           margins = "both")

1 个答案:

答案 0 :(得分:0)

您可以使用 xlim()ylim() 代替 coord_cartesian 来解决此问题。

dataset <- read.csv("~/Desktop/dataset.csv")

library(ggplot2)
library(ggthemes)
library(ggExtra)

plot_center <- ggplot(data = dataset, aes(x = E,
                                          y = S)) +
    stat_density2d(aes(fill=..level..),
                   bins= 8, 
                   geom="polygon",
                   col = "black",
                   alpha = 0.5) + 
    scale_fill_continuous(low = "yellow",
                          high = "red") +
    scale_x_continuous(limits = c(-1,2)) + # Render padding for polygon
    scale_y_continuous(limits = c(-1,2)) + #
    xlim(c(0,1)) +
    ylim(c(0,1)) +
    theme_tufte(base_size = 15, base_family = "Roboto") +
    theme(axis.text    = element_text(color = "black"),
          panel.border = element_rect(colour = "black", fill=NA, size=1),
          legend.text  = element_text(size = 12, family = "Roboto"),
          legend.title = element_blank(),
          legend.position = "none")

ggMarginal(plot_center,
           type = "histogram",
           col = "black",
           fill = "orange",
           margins = "both")