Repel geom label and text in ggplot. And ordering geom points based on size

江枫思渺然 提交于 2021-02-10 06:35:09

问题


I have 2 data frames such as these:

df1 <- data.frame(
  party = c("Blue Party", "Red Party"),
  dim1 = c(0.03, -0.04),
  dim2 = c(-0.05, 0.02),
  sz = c(34, 42)
)
df2 <- data.frame(
  var = c("Economic", "Gov trust", "Inst trust", "Nationalism", "Religiosity"),
  dim1 = c(0.1, -0.5, 0, 0.6, 0.4),
  dim2 = c(0.1, 0.6, 0, 0, 0.3)
)

I want to plot the parties from df1 as points defined by size and include arrows based on df2 on the same graph. I've used ggplot to do this:

ggplot(df1, aes(x = dim1, y = dim2, color = party)) +
  geom_point(size = df1$sz) +
  scale_size_area() +
  scale_x_continuous(limits = c(-1.5, 1.5)) +
  scale_y_continuous(limits = c(-1.5, 1.5)) +
  geom_label_repel(aes(label = party),
                   box.padding   = 1,
                   point.padding = 1.5,
                   force = 1) +
  geom_segment(aes(xend=0, yend=0, x=dim1, y=dim2), data=df2,
    arrow=arrow(length=unit(0.20,"cm"), ends="first", type = "closed"), color="black") +
  geom_text_repel(aes(x=dim1, y=dim2, label=var),
    data = df2, color = "black", size = 3, force = 1)

Resulting in this:

The functions geom_label_repel and geom_text_repel prevent the party labels and the texts from overlapping, but how can I repel the labels and texts from each other?

My second problem is that I want to order the points, with the smallest in the front and the largest at the back. How could this be done?

Appreciate the help!

来源:https://stackoverflow.com/questions/53430041/repel-geom-label-and-text-in-ggplot-and-ordering-geom-points-based-on-size

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!