【问题标题】:r: ggplot2 scatterplot with sized circles and legend issuer:带有大小圆圈和图例问题的ggplot2散点图
【发布时间】:2017-01-23 18:57:20
【问题描述】:

我的问题是我想做一个散点图并将圆圈大小调整为数据中的一个变量。虽然我可以做到这一点(由于某种原因需要重新调整变量),但圆圈的图像看起来很奇怪(就像发生了一些像素化),并且图例中的点的大小也最终失真了。

知道什么给了?数据和代码如下。

df_t<-structure(
  list(
    x = c(
      0.271802325581395,
      0.28416149068323,
      0.300177619893428,
      0.273542600896861,
      0.277777777777778,
      0.295302013422819
    ),
    y = c(
      0.783430232558139,
      0.708074534161491,
      0.810834813499112,
      0.689088191330344,
      0.766937669376694,
      0.651006711409396
    ),
    comp = 1:6,
    mkt_share = c(
      0.259953161592506,
      0.241921204072598,
      0.404237288135593,
      0.276032315978456,
      0.283212302434857,
      0.125510940129839
    )
  ),
  .Names = c("x", "y", "comp", "mkt_share"),
  row.names = c("p2", "p3", "p4", "p5", "p6", "p7"),
  class = "data.frame"
)

ggplot(data=df_t, aes(x=x, y=y,  label=round(y,2), color = as.factor(comp)))+
  geom_point(size = df_t$mkt_share*50)+
  geom_text(size=4, color="white")+
  coord_cartesian(xlim = c(0, .4), ylim=c(.6,.9))

【问题讨论】:

  • geom_point 更改为 geom_point(aes(size = mkt_share)) +。在您的原始代码中,您在对aes 的调用之外设置了大小,并且还在ggplot 环境之外到达了原始数据框(通过使用df_t$mkt_share 而不仅仅是mkt_share)。 ggplot 从字面上理解,所以大小值非常小,因为市场份额值很小,因此需要 50 的比例因子。另一方面,将 mkt_share 映射到对 aes 的调用中的大小提供忠实地映射到尺寸美学。
  • 我尝试按照您的建议进行操作,但这似乎不起作用——而是创建了第二个图例,名为 mkt_share
  • 是的,没错。 comp 映射到颜色。它是一个离散变量,有 6 种不同的颜色,标签从 1 到 6。mkt_share 是一个映射到大小的连续变量。你会得到每个不同的传说。您的原始代码(生成在我的系统上看起来不错的图)“硬编码”圆圈的大小,为您提供 comp 的单个图例,但圆圈大小等于 mtk_share * 50。所以你得到单个图例,但没有标度来告诉您将多大的圆映射到给定的 mkt_share 值。

标签: r ggplot2


【解决方案1】:
+guides(colour = guide_legend(override.aes = list(size=5)))

然后玩size

在这里找到:

How to increase the size of points in legend of ggplot2?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2021-04-14
    相关资源
    最近更新 更多