我有一个数据框:
df <- data.frame(Name=c('abc', 'bcd', 'cde', 'bcd', 'abc', 'def'), Pos=c(1, 2, 3, 2, 4, 5))
Name Pos
abc 1
bcd 2
cde 3
bcd 2
abc 4
def 5
我想按照位置的顺序绘制名称,但我想要显示每一行,即使它是重复的值:
ggplot(df, aes(Pos, reorder(Name, -Pos))) +
geom_jitter(width=0, height=0.05)
我可以看到'bcd'在Pos 2处有两个点,而'abc'在Pos 1和4处有一个点。但我希望这些点位于y轴上的不同刻度上。如果我将df $ Name更改为一个字符而不是一个因子(df $ Name&lt; - as.character(df $ Name)),这没有帮助。
有办法做到这一点吗?
答案 0 :(得分:1)
也许这样......?
library(dplyr)
df <- df %>%
group_by(Name,Pos) %>%
mutate(Name1 = paste0(Name,row_number()))
labs <- with(df,setNames(as.character(Name),Name1))
ggplot(df, aes(Pos, reorder(Name1, -Pos))) +
geom_jitter(width=0, height=0.05) +
scale_y_discrete(labels = labs)
答案 1 :(得分:1)
这会将行号添加到data.frame中,并使用这些行绘制,但会将Names指定为标签。这是你的想法吗?
library(tidyverse)
df <- data.frame(Name=c('abc', 'bcd', 'cde', 'bcd', 'abc', 'def'), Pos=c(1, 2, 3, 2, 4, 5)) %>%
mutate(n = 1:n())
ggplot(df, aes(Pos, n)) +
geom_point() +
scale_y_continuous(breaks = df$n, labels = df$Name)