微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在小提琴图表中表示点

如何解决在小提琴图表中表示点

以下代码绘制了一个带有与值相关联的权重的小提琴图表。问题是,为什么只显示一个点?顶部是 218*1=218,因此显示了 218 处的点,这很好。但是,对于第二个和第三个,预计会在 218*0.1=21.830*0.9=27 处看到两个点。

> library(ggplot2)
> mydata <- read.csv('test.csv',header=T,row.names=1)
> mydata
       V1  V2 V3
P1.K1 218 1.0  R
P2.K1 218 0.1  R
P2.K2  30 0.9  R
> p <- ggplot(mydata,aes(x=V3,y=V1,weight=V2)) + geom_violin(trim=FALSE)
> p + geom_dotplot(binaxis='y',stackdir='center',dotsize=1)
`stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
>

enter image description here

对此有什么想法吗?

解决方法

已更新 在 Waldi 的帮助下,现在应该可以工作了。

这里的主要内容是将加权值分配给 geom_dotplot 这将仅用一个点解决 Op 的问题。

library(ggplot2)

#  add V1_weight to mydata
mydata <- mydata %>% 
  mutate(V1_weight= V1*V2)

ggplot(mydata) + 
  geom_violin( mapping = aes(x = V3,y = V1,weight = V2),trim=FALSE) +
  geom_dotplot(aes(x = V3,y=V1_weight),binaxis='y',stackdir='center',dotsize=1) 

enter image description here

数据:

structure(list(id = c("P1.K1","P2.K1","P2.K2"),V1 = c(218,218,30),V2 = c(1,0.1,0.9),V3 = c("R","R","R"),V1_weight = c(218,21.8,27)),row.names = c(NA,-3L),class = c("tbl_df","tbl","data.frame"))
,

geom_dotplot 没有 weight 映射:

library(ggplot2)
ggplot(mydata,) + geom_violin( mapping = aes(x = V3,trim=FALSE) +
                   geom_dotplot(mydata,mapping = aes(x = V3,y = V1),dotsize=1)

enter image description here

,

根据您的评论,您似乎想要 Waldi 的回答中的 geom_violin() 行和 TarJae 的回答中的 geom_dotplot() 行:

ggplot(mydata,aes(x = V3)) + 
  geom_violin(aes(y = V1,trim = FALSE) + 
  geom_dotplot(aes(y = V1 * V2),binaxis = 'y',stackdir = 'center',dotsize = 1)

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。