使用带有规范化值的geom_scatterpie和geom_scatterpie_legend创建绘图

时间:2017-08-13 17:37:44

标签: r ggplot2 scatter-plot

我正在尝试用R中的scatterpie包创建一个scatterpie图。我的数据看起来像这样

  EEE Innovation n equal negative positive     n_mod
   0          0 2    NA        2       NA 0.3162278
   0          1 6     4        2       NA 0.5477226
   0          2 1    NA        1       NA 0.2236068
   0          3 2    NA        2       NA 0.3162278
   0          5 1     1       NA       NA 0.2236068
   1          0 4     2        1        1 0.4472136
   1          1 14     4        5       5 0.5916080
   1          2  9     3        2       4 0.4743416
   1          3  1    NA        1      NA 0.1581139
   1          5  1    NA        1      NA 0.1581139
   2          1  3    NA        2       1 0.2738613
   3          0  1    NA        1      NA 0.1581139
   3          1  3     1        2      NA 0.2738613
   3          2  4    NA        2       2 0.3162278
   4          0  3     2        1      NA 0.2738613
   4          1 14     5        3       6 0.5916080
   4          2 14     4       NA      10 0.5916080

为了创建我的情节,我使用这个命令:

ggplot() + 
   geom_scatterpie(aes(x=EEE,y=Innovation, r = n_mod), data=pie_data, 
                   cols=c("equal","negative","positive")) +
   geom_scatterpie_legend((all_pie_data$n_mod), n=7, 
                          labeller= function(x) x=sort(unique(pie_data$n)))

我使用的是n_mod

for (l in 1:17) {
all_pie_data$n_mod[l] <- sqrt(all_pie_data$n[l]/40)
}

而不是n作为半径,因为馅饼的半径对于我的图形而言太大而较小的馅饼将被埋在较大的那些之下。对于图例我想要具有n_mod的半径,但带有“真实”n值的标签。 当我尝试创建此图时,我收到以下错误消息:

Error in $<-.data.frame(*tmp*, "label", value = c(1L, 2L, 3L, 4L,  : 
replacement has 7 rows, data has 5

如果我在n_mod创建中使用低于24的任何内容,则不会显示此错误:

for (l in 1:17) {
all_pie_data$n_mod[l] <- sqrt(all_pie_data$n[l]/24)
}

由此生成的馅饼对于我的图表仍然很大:

enter image description here

有没有人知道如何解决这个问题或另一种方法来创建更小的馅饼?

P.S:这是我在这里的第一个问题,如果我对格式做错了或者缺少任何信息,我愿意改进!

1 个答案:

答案 0 :(得分:0)

你可以设置&#34; r&#34;到:

r = n_mod/2

这应该让它们看起来更小。

ggplot() + 
geom_scatterpie(aes(x=EEE,y=Innovation, r = n_mod/2), data=pie_data, 
               cols=c("equal","negative","positive")) +
geom_scatterpie_legend((all_pie_data$n_mod), n=7, 
                      labeller= function(x) x=sort(unique(pie_data$n)))