Saya memiliki 'elevasi' sebagai sumbu y dan saya menginginkannya sebagai variabel diskrit (dengan kata lain saya ingin ruang antara setiap elevasi sama dan tidak relatif terhadap perbedaan numerik). Sumbu x saya adalah 'waktu' (tanggal julian).

    mydata2<- data.frame(
                   "Elevation" = c(rep(c(1200),10),rep(c(1325.5),10),rep(c(1350.75),10), rep(c(1550.66),10)),
                   "Sex" = c(rep(c("F","M"),20)),
                   "Type" = c(rep(c("emerge","emerge","endhet","endhet","immerge","immerge","melt","melt", "storpor","storpor"),4)),
                   "mean" = c(rep(c(104,100,102,80,185,210,84,84,188,208,104,87,101,82, 183,188,83,83,190,189),2))
                   "se"=c(rep(c(.1,.01,.2,.02,.03),4)))

mydata2$Sex<-factor(mydata2$Sex))
mydata2$Type<-factor(mydata2$Type))
mydata2$Elevation<-factor(mydata2$Elevation))

at<-ggplot(mydata2, aes(y = mean, x = Elevation,color=Type, group=Sex)) +
  geom_pointrange(aes(ymin = mean-se, ymax = mean+se), 
                  position=position_jitter(width=0.2,height=.1), 
                  linetype='solid') +
  facet_grid(Sex~season,scales = "free")+
  coord_flip()

at

enter image description here

Idealnya, saya ingin setiap 'tipe' dipisahkan secara vertikal. Ketika saya jitter atau menghindar hanya yang dekat saja yang terpisah dan tidak merata. Apakah ada cara untuk memaksa setiap 'tipe' sedikit digeser sehingga semuanya berada di jalurnya sendiri? Saya mencoba memaksanya dengan memberikan setiap jenis 'elevasi' yang sedikit berbeda tetapi kemudian saya berakhir dengan sumbu y yang berantakan (saya tidak dapat menemukan cara untuk mempertahankan intinya tetapi tidak menampilkan semua tanda centang dengan skala diskrit ).

Terima kasih untuk bantuannya.

1
Amanda Goldberg 13 Desember 2019, 19:39

1 menjawab

Jawaban Terbaik

Jika Anda ingin menggunakan nilai numerik sebagai nilai diskrit, Anda harus menggunakan as.factor. Dalam contoh Anda, coba gunakan x = as.factor(Elevation).

Selain itu, saya akan menyarankan untuk menggunakan position = position_dodge() untuk mendapatkan poin dari kondisi berbeda yang sesuai dengan ketinggian yang sama untuk diplot secara berdampingan

ggplot(mydata2, aes(y = mean, x = as.factor(Elevation),color=Type, group=Sex)) +
  geom_pointrange(aes(ymin = mean-se, ymax = mean+se), 
                  position=position_dodge(), 
                  linetype='solid') +
  facet_grid(Sex~season,scales = "free")+
  coord_flip()

EDIT dengan contoh data yang disediakan oleh OP

Menggunakan dataset Anda, saya tidak bisa mendapatkan rentang yang diplot dengan poin Anda. Jadi, saya membuat dua variabel Lower dan Upper menggunakan paket dplyr.

Kemudian, saya tidak memberikan commdnas Anda facotr(...) yang Anda berikan dalam pertanyaan Anda, tetapi sebaliknya, saya menggunakan as.factor(Elevation) dan position_dodge(0.9) untuk plot untuk mendapatkan plot berikut:

library(tidyverse)
mydata2 %>% mutate(Lower = mean-se*100, Upper = mean+se*100) %>%
  ggplot(., aes( x = as.factor(Elevation), y = mean, color = Type))+
  geom_pointrange(aes(ymin = Lower, ymax = Upper), linetype = "solid", position = position_dodge(0.9))+
  facet_grid(Sex~., scales = "free")+
  coord_flip()

enter image description here

Apakah itu terlihat seperti yang Anda cari?

Data Dataset yang Anda berikan berisi beberapa kesalahan (terlalu banyak tanda kurung), jadi saya perbaiki di sini.

mydata2<- data.frame(
  "Elevation" = c(rep(c(1200),10),rep(c(1325.5),10),rep(c(1350.75),10), rep(c(1550.66),10)),
  "Sex" = rep(c("F","M"),20),
  "Type" = rep(c("emerge","emerge","endhet","endhet","immerge","immerge","melt","melt", "storpor","storpor"),4),
  "mean" = rep(c(104,100,102,80,185,210,84,84,188,208,104,87,101,82, 183,188,83,83,190,189),2),
  "se"=rep(c(.1,.1,.2,.05,.03),4))
2
dc37 15 Desember 2019, 03:23