去掉中央白圈?

时间:2017-06-16 15:38:24

标签: r plot ggplot2 geometry

我有一个圆形的情节,我想找到一种方法去除中间的小白圈。

这是我的代码:

ggplot(d5)+geom_tile(aes(x=x, y=y, fill=xyz))+
   scale_y_continuous(expand=c(0,0),breaks=NULL,limits=c(0,3.6))+
   scale_fill_continuous(low="darkgreen", high="white")+
   coord_polar(start=-1*pi/2, direction=1)+
   theme_bw()+
   theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())
非常感谢。

2 个答案:

答案 0 :(得分:2)

我在这里做了一个虚拟的例子:

require(dplyr)
expand.grid(x = 1:20, y = 1:2) %>% 
  mutate(z = rnorm(length(x))) %>% 
  ggplot()+geom_tile(aes(x=x, y=y, fill=z))+
  scale_y_continuous(expand=c(0,0),breaks=NULL,limits=c(0,3.6))+
  scale_fill_continuous(low="darkgreen", high="white")+
  coord_polar(start=-1*pi/2, direction=1)+
  theme_bw()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())

enter image description here

您使用limits的{​​{1}}和expand参数走在正确的轨道上,您只需要确定实际下限的位置。为此,让我们在没有scale_y且没有coord_polar的情况下绘制相同的集合。

enter image description here

因此,在我的示例中,磁贴的最小边缘位于scale_y。因此,您必须弄清楚最小的y=0.5值是多少,然后为y(即1)减去默认height的一半。将该值用于较低geom_tile限制,并且饼图中的孔将消失。

enter image description here

答案 1 :(得分:1)

只是@Brian给出的答案的补充。
消除中间小白圈的y轴的正确极限可以计算如下:

library(dplyr)
library(ggplot2)
set.seed(4321)
d5 <- expand.grid(x = 1:20, y = 1:2) %>% 
  mutate(z = rnorm(length(x))) 

yval <- sort(unique(d5$y))
h <- (yval[2] - yval[1])/2
ylim_lo <- yval[1] - h
ylim_up <- yval[2] + h

ggplot(d5)+geom_tile(aes(x=x, y=y, fill=z))+
   scale_y_continuous(expand=c(0,0), breaks=NULL, limits=c(ylim_lo,ylim_up)) +
   scale_fill_continuous(low="darkgreen", high="white") +
   coord_polar(start=-1*pi/2, direction=1) +
   theme_bw()+
   theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

enter image description here