【发布时间】: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值。