在自定义绘图中绘制点边界
Draw points border in a customized plot
我有这样的数据集:
Year<-rep(2001:2005, each = 5)
name<-c("John","Ellen","Mark","Randy","Luisa")
Name<-c(rep(name,5))
Value<-sample(seq(0,25,by=1),25)
mydata<-data.frame(Year,Name,Value)
我的情节是这样的:
p <- ggplot(mydata, aes(x=Year, y=reorder(Name, desc(Name)), size = Value)) +
geom_point(aes(colour = Value,
alpha = I(as.numeric(Value > 0))))
p <- p + scale_colour_viridis_c(option = "D", direction = -1,
limits = c(1, 25)) +
scale_size_area(guide = "none") +
ylab("Name") +
theme(axis.line = element_blank(),
axis.text.x=element_text(size=11,margin=margin(b=10),colour="black"),
axis.text.y=element_text(size=13,margin=margin(l=10),colour="black",
face="italic"),
axis.ticks = element_blank(),
axis.title=element_text(size=18,face="bold"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(),
legend.text = element_text(size=14),
legend.title = element_text(size=18))
我想通过两种方式改进它,但我不知道如何改进。
- 我想在点周围添加黑色边框。我知道我应该使用
pch>20
并指定 colour
,但是因为我的颜色被映射到数据集的一个特征(在这种情况下它们取决于 value
),我不知道具体怎么做。请注意,未绘制 value = 0
点。简单的策略,比如在我的点下画更大的黑点,对我来说似乎是空想。
- 我想更改音阶的换档(例如,我希望每 2.5 换档而不是每 5 档换档),但它是一个连续的音阶,我不确定如何做到这一点。
我对 ggplo2 不是很熟悉,如有任何帮助,我们将不胜感激!
您确实可以使用 >20 的形状,例如我在这里使用 shape=21
。然后你需要将你的 scale_color_
更改为 scale_fill_
,因为颜色现在是黑色的(它是形状的边框)。
对于休息时间,您可以直接在体重秤中指定。结合两者:
ggplot(mydata, aes(x=Year, y=reorder(Name, desc(Name)), size = Value)) +
geom_point(aes(fill = Value,
alpha = I(as.numeric(Value > 0))), shape=21, color = "black") +
scale_fill_viridis_c(option = "D", direction = -1,
limits = c(1, 25), breaks=seq(1, 25, 2.5)) +
scale_size_area(guide = "none") +
ylab("Name") +
theme(axis.line = element_blank(),
axis.text.x=element_text(size=11,margin=margin(b=10),colour="black"),
axis.text.y=element_text(size=13,margin=margin(l=10),colour="black",
face="italic"),
axis.ticks = element_blank(),
axis.title=element_text(size=18,face="bold"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(),
legend.text = element_text(size=14),
legend.title = element_text(size=18))
我有这样的数据集:
Year<-rep(2001:2005, each = 5)
name<-c("John","Ellen","Mark","Randy","Luisa")
Name<-c(rep(name,5))
Value<-sample(seq(0,25,by=1),25)
mydata<-data.frame(Year,Name,Value)
我的情节是这样的:
p <- ggplot(mydata, aes(x=Year, y=reorder(Name, desc(Name)), size = Value)) +
geom_point(aes(colour = Value,
alpha = I(as.numeric(Value > 0))))
p <- p + scale_colour_viridis_c(option = "D", direction = -1,
limits = c(1, 25)) +
scale_size_area(guide = "none") +
ylab("Name") +
theme(axis.line = element_blank(),
axis.text.x=element_text(size=11,margin=margin(b=10),colour="black"),
axis.text.y=element_text(size=13,margin=margin(l=10),colour="black",
face="italic"),
axis.ticks = element_blank(),
axis.title=element_text(size=18,face="bold"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(),
legend.text = element_text(size=14),
legend.title = element_text(size=18))
我想通过两种方式改进它,但我不知道如何改进。
- 我想在点周围添加黑色边框。我知道我应该使用
pch>20
并指定colour
,但是因为我的颜色被映射到数据集的一个特征(在这种情况下它们取决于value
),我不知道具体怎么做。请注意,未绘制value = 0
点。简单的策略,比如在我的点下画更大的黑点,对我来说似乎是空想。 - 我想更改音阶的换档(例如,我希望每 2.5 换档而不是每 5 档换档),但它是一个连续的音阶,我不确定如何做到这一点。
我对 ggplo2 不是很熟悉,如有任何帮助,我们将不胜感激!
您确实可以使用 >20 的形状,例如我在这里使用 shape=21
。然后你需要将你的 scale_color_
更改为 scale_fill_
,因为颜色现在是黑色的(它是形状的边框)。
对于休息时间,您可以直接在体重秤中指定。结合两者:
ggplot(mydata, aes(x=Year, y=reorder(Name, desc(Name)), size = Value)) +
geom_point(aes(fill = Value,
alpha = I(as.numeric(Value > 0))), shape=21, color = "black") +
scale_fill_viridis_c(option = "D", direction = -1,
limits = c(1, 25), breaks=seq(1, 25, 2.5)) +
scale_size_area(guide = "none") +
ylab("Name") +
theme(axis.line = element_blank(),
axis.text.x=element_text(size=11,margin=margin(b=10),colour="black"),
axis.text.y=element_text(size=13,margin=margin(l=10),colour="black",
face="italic"),
axis.ticks = element_blank(),
axis.title=element_text(size=18,face="bold"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(),
legend.text = element_text(size=14),
legend.title = element_text(size=18))