28

の行をジッターする方法はありgeom_line()ますか? このプロットの目的に少し反することは知っていますが、行数の少ないプロットがあり、すべてを表示したい場合は便利です。この可視性の問題に対する他の解決策かもしれません。

コードについては以下を参照してください。 ジッター geom_line

A  <- c(1,2,3,5,1)
B  <- c(3,4,1,2,3)
id <- 1:5
df <- data.frame(id, A, B)


# install.packages(reshape2)
require(reshape2) # for melt
dfm <- melt(df, id=c("id"))

# install.packages(ggplot2)
require(ggplot2)
p1 <- ggplot(data = dfm, aes(x = variable, y = value, group = id, 
color= as.factor(id))) + geom_line() + labs(x = "id # 1 is hardly 
visible as it is covered by id # 5") + scale_colour_manual(values = 
c('red','blue', 'green', 'yellow', 'black')) 


p2 <- ggplot(subset(dfm, id != 5), aes(x = variable, y = value, 
group = id, color= as.factor(id))) + geom_line() + labs(x = "id # 
5 removed, id # 1 is visible") + scale_colour_manual(values = 
c('red','blue', 'green', 'yellow', 'black')) 

# install.packages(RODBC)
require(gridExtra)

grid.arrange(p1, p2)
4

4 に答える 4

35

あなたが試すことができます

geom_line(position=position_jitter(w=0.02, h=0))

そして、それがうまくいくかどうかを確認してください。

于 2012-06-02T21:40:00.327 に答える
25

2 つの行が正確に重なり合うのを防ぎたいだけなら、より良い方法があります: position_dodge()は、「オーバーラップを横にかわすことで位置を調整します」。これは、必要がない場合でも、任意の行にジッターを追加するよりも優れています。

position_dodge() を使用して ggplot2 行が正確に重ならないようにします

コード例:

df<-data.frame(x=1:10,y=1:10,z=1:10);
df.m <- melt(df, id.vars = "x");
ggplot(df.m, aes(x=x,y=value,group=variable,colour=variable)) 
    + geom_line(position=position_dodge(width=0.2));

のおかげposition_dodge()で、プロットに 2 つの線があり、たまたま正確に一致していることがわかります。

position_doge を使用して ggplot で行が重ならないようにする

于 2016-04-18T13:24:11.147 に答える
4

私はさまざまな線種を使用する傾向があるため、たとえば、実線の青い線がその上の赤い破線を「透けて見える」ようにします。繰り返しますが、読者に何を伝えたいかによって異なります。物事が雑然としない限り、データは点と理論の線でなければならないことを何よりもまず心に留めておいてください。yとx の値が同じでない限り、ポイントが見やすくなります。(または、既存の関数を x 値に適用することもできますjitter) 次に、どの実行が「バンドル」内にあり、どれが外れ値であるかを表示したいだけの場合、2 つの外れ値が近くにある可能性は非常に低いため、重複は問題ではありません。 -同等。

ほぼ等しいランの束を表示したい場合は、実際の値ではなく平均に対してデルタをプロットすることをお勧めします (つまり、読者はよりよく理解できます)。

于 2012-06-02T21:30:08.073 に答える
1

Y軸が要因であるため、position_dodgeは何もしないという、説明とは異なる問題の解決策を提案したいと思います。

ここに画像の説明を入力

コード:

library(tidyverse)

time_raw <- tibble(year=1900:1909,
            person_A=c(rep("Rome",2),rep("Jerusalem",8)),
            person_B=c(rep("Jerusalem",5),rep("Rome",5)))


achivments <- tribble(~year,~who,~what,
                  1900,"person_A","born",
                  1900,"person_B","born",
                  1909,"person_A","died",
                  1909,"person_B","died",
                  1905,"person_A","super star",
                  1905,"person_B","super star")

SCALE=0.5

jitter_locations <- time_raw %>%
  pivot_longer(-year,names_to="who",values_to="place") %>%
  distinct(place)%>%
  filter(!is.na(place)) %>% 
  mutate(y_place=seq_along(place)) 

jitter_lines <- time_raw %>%
  pivot_longer(-year,names_to="who",values_to="place") %>%
  distinct(who) %>%
  mutate(y_jitter=scale(seq_along(who))*0.015)

data_for_plot <- time_raw %>% 
 pivot_longer(-year,names_to="who",values_to="place") %>% 
 filter(!is.na(place)) %>% 
 left_join(achivments) %>% 
 left_join(jitter_locations) %>% 
 left_join(jitter_lines)


 data_for_plot %>% 
   ggplot(aes(x=year,y=y_place+y_jitter,color=who,group=who))+
   geom_line(size=2)+
   geom_hline(aes(yintercept=y_place),size=50,alpha=0.1)+
   geom_point(data = . %>% filter(!is.na(what)),size=5)+
   geom_label(aes(label=what),size=3,nudge_y = -0.025)+
   theme_bw()+
   coord_cartesian(ylim = c(min(jitter_locations$y_place)-0.5*SCALE,
                       max(jitter_locations$y_place)+0.5*SCALE))+
   scale_y_continuous(breaks = 
   min(jitter_locations$y_place):max(jitter_locations$y_place),
                 labels = jitter_locations$place)+
   scale_x_continuous(breaks =  
   min(data_for_plot$year):max(data_for_plot$year))+

   ylab("Place")
于 2021-12-31T22:52:17.723 に答える