在自定义图中绘制点边框[重复]

Posted

技术标签:

【中文标题】在自定义图中绘制点边框[重复]【英文标题】:Draw points border in a customized plot [duplicate] 【发布时间】:2021-05-27 16:35:03 【问题描述】:

我有一个这样的数据集:

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&gt;20 并指定colour,但是因为我的颜色映射到数据集的一个特征(在这种情况下它们依赖于value),所以我不知道该怎么做。请注意,value = 0 点未绘制。简单的策略,例如在我的点下绘制更大的黑点对我来说似乎是乌托邦的。 我想更改刻度的间隔(例如,我希望每 2.5 间隔一个间隔,而不是每 5 个间隔),但它是一个连续的刻度,我不知道该怎么做那个。

我对 ggplo2 不是很熟悉,因此将不胜感激!

【问题讨论】:

【参考方案1】:

您确实可以使用 >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))

【讨论】:

非常感谢,这正是我想要的。我现在明白了:我必须在aes() 之外指定参数并将colour 更改为fill

以上是关于在自定义图中绘制点边框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android 自定义控件——图片剪裁

强制在自定义 WPF 控件中重新绘制自定义绘制的 UIElement

在自定义活动中绘制 TextView?

在自定义视图中绘制描边形状

CAShapeLayers 未在自定义子类 (UIControl) 中绘制

R语言ggplot2可视化绘制散点图(scatter plot)使用gghighlight包突出高亮散点图中的特定数据点并自定义添加彩色文本标签(color text annotation)