Saya telah menggunakan ggplot
perintah berikut :
ggplot(survey, aes(x = age)) + stat_bin(aes(n = nrow(h3), y = ..count.. / n), binwidth = 10)
+ scale_y_continuous(formatter = "percent", breaks = c(0, 0.1, 0.2))
+ facet_grid(hospital ~ .)
+ theme(panel.background = theme_blank())
untuk menghasilkan
Saya ingin mengubah label sisi , menjadi sesuatu yang lebih pendek (seperti Hosp 1
, Hosp 2
...) karena labelnya terlalu panjang sekarang dan terlihat sempit (menambah ketinggian grafik bukanlah suatu pilihan, itu akan memakan terlalu banyak tempat di dokumen). Saya melihat halaman bantuan facet_grid tetapi tidak tahu caranya.
ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)
levels(x$measurements) <- c(bquote(Area ~~ (cm^2)), bquote(Length ~~ (cm)))
) label itu tidak akan muncul dalam ekspresi matematika. Bagaimana seseorang menunjukkan ekspresi sebagai label facet?labeller
opsi untukfacet_grid
: stackoverflow.com/questions/37089052/…Berikut ini adalah solusi yang menghindari pengeditan data Anda:
Katakanlah plot
group
Anda difasilitasi oleh bagian kerangka data Anda, yang memiliki levelcontrol, test1, test2
, lalu buat daftar yang dinamai dengan nilai-nilai tersebut:Kemudian buat fungsi 'labeller', dan dorong ke dalam panggilan facet_grid Anda:
Ini menggunakan tingkat bingkai data untuk mengindeks daftar nama_rumah sakit, mengembalikan nilai daftar (nama yang benar).
Harap dicatat bahwa ini hanya berfungsi jika Anda hanya memiliki satu variabel faceting. Jika Anda memiliki dua sisi, maka fungsi labeller Anda harus mengembalikan vektor nama yang berbeda untuk setiap sisi. Anda dapat melakukan ini dengan sesuatu seperti:
Di mana
facet1_names
danfacet2_names
merupakan daftar nama yang ditentukan sebelumnya yang diindeks oleh nama indeks facet ('Hostpital # 1', dll.).Sunting: Metode di atas gagal jika Anda meneruskan kombinasi variabel / nilai yang tidak diketahui labeller. Anda dapat menambahkan gagal-aman untuk variabel tidak dikenal seperti ini:
Jawaban diadaptasi dari cara mengganti label strip.text di ggplot dengan facet dan margin = TRUE
edit: PERINGATAN : jika Anda menggunakan metode ini untuk facet oleh kolom karakter , Anda mungkin mendapatkan label yang salah. Lihat laporan bug ini .diperbaiki dalam versi terbaru ggplot2.sumber
Inilah solusi lain yang sesuai dengan semangat yang diberikan oleh @naught101, tetapi lebih sederhana dan juga tidak memberikan peringatan pada versi terbaru ggplot2.
Pada dasarnya, Anda pertama kali membuat vektor karakter bernama
Dan kemudian Anda menggunakannya sebagai labeller, hanya dengan memodifikasi baris terakhir dari kode yang diberikan oleh @ naught101 ke
Semoga ini membantu.
sumber
as_labeller
? Saya telah menemukan beberapa kode sumber untuk di repositori CRAN GitHub , tetapi setelah memutakhirkan ke versi terbaru (pada CRAN!) Saya sepertinya tidak memiliki fungsi.hospital ~ gender
atau apalah? Apakah ada cara untuk menggunakan labeller pada kedua sumbu? Saya tidak bisa melihat sesuatu yang jelas di dokumen.Inilah cara saya melakukannya dengan
facet_grid(yfacet~xfacet)
menggunakan ggplot2, versi 2.2.1:Perhatikan bahwa ini tidak mengandung panggilan ke
as_labeller()
- sesuatu yang saya perjuangkan untuk sementara waktu.Pendekatan ini diilhami oleh contoh terakhir pada halaman bantuan fungsi Coeller to labeller .
sumber
setNames()
stackoverflow.com/a/22428439/3362993Jika Anda memiliki dua sisi
hospital
danroom
ingin mengubah nama hanya satu, Anda dapat menggunakan:Untuk mengganti nama dua sisi menggunakan pendekatan berbasis vektor (seperti pada jawaban naught101), Anda dapat melakukan:
sumber
Cara termudah untuk berubah TANPA mengubah data yang mendasarinya adalah:
1) Buat objek menggunakan
as_labeller
fungsi menambahkan tanda centang kembali untuk masing-masing nilai default :2) Kami menambahkan ke dalam GGplot:
sumber
Perhatikan bahwa solusi ini tidak akan berfungsi dengan baik seandainya ggplot akan menunjukkan lebih sedikit faktor daripada variabel Anda yang sebenarnya berisi (yang bisa terjadi jika Anda misalnya berlangganan):
Solusi sederhana (selain menambahkan semua faktor yang tidak digunakan dalam names_li, yang bisa membosankan) adalah dengan menjatuhkan faktor yang tidak digunakan dengan droplevels (), baik dalam dataset asli, atau dalam fungsi labbeler, lihat:
sumber
Solusi ini sangat dekat dengan apa yang dimiliki @domi, tetapi dirancang untuk mempersingkat nama dengan mengambil 4 huruf pertama dan nomor terakhir.
sumber
Keduanya
facet_wrap
danfacet_grid
juga menerima masukan dariifelse
sebagai argumen. Jadi jika variabel yang digunakan untuk faceting adalah logis, solusinya sangat sederhana:Jika variabel memiliki lebih banyak kategori,
ifelse
pernyataan itu perlu disarangkan .Sebagai efek samping, ini juga memungkinkan pembuatan kelompok-kelompok yang harus dipertimbangkan dalam
ggplot
panggilan.sumber
Menambahkan solusi lain yang mirip dengan @ domi dengan parsing simbol matematika, superskrip, subskrip, tanda kurung / kurung, .etc.
Dibuat pada 2019-03-30 oleh paket reprex (v0.2.1.9000)
sumber
Saya pikir semua solusi lain sangat membantu untuk melakukan ini, tetapi ada cara lain.
Saya berasumsi:
dplyr
paket, yang memilikimutate
perintah praktis , dandataset Anda dinamai
survey
.survei%>% bermutasi (Hosp1 = Hospital1, Hosp2 = Hospital2, ........)
Perintah ini membantu Anda mengubah nama kolom, namun semua kolom lainnya disimpan.
Kemudian lakukan hal yang sama
facet_wrap
, Anda baik-baik saja sekarang.sumber
Definisi fungsi labeller
variable, value
sebagai argumen tidak akan bekerja untuk saya. Juga jika Anda ingin menggunakan ekspresi Anda perlu menggunakan lapply dan tidak bisa hanya menggunakanarr[val]
, karena argumen ke fungsi adalah data.frame.Kode ini berhasil:
sumber
Karena saya belum diizinkan untuk mengomentari posting, saya memposting ini secara terpisah sebagai tambahan untuk jawaban Vince dan jawaban son520804 . Penghargaan bagi mereka.
Menggunakan contoh iris Vince dan kode parsial son520804, saya melakukan ini dengan fungsi bermutasi dan mencapai solusi yang mudah tanpa menyentuh dataset asli. Caranya adalah dengan membuat vektor nama stand-in dan menggunakan mutate () di dalam pipa untuk memperbaiki nama facet sementara:
Dalam contoh ini Anda dapat melihat level i $ Species untuk sementara diubah menjadi nama-nama umum terkait yang terkandung dalam vektor new_names. Baris berisi
dapat dengan mudah dihapus untuk mengungkapkan penamaan aslinya.
Peringatan: Ini dapat dengan mudah menyebabkan kesalahan dalam nama jika vektor new_name tidak diatur dengan benar. Mungkin akan jauh lebih bersih untuk menggunakan fungsi terpisah untuk mengganti string variabel. Ingatlah bahwa vektor new_name mungkin perlu diulang dengan cara yang berbeda agar sesuai dengan urutan dataset asli Anda. Harap periksa dua kali dan tiga kali lipat bahwa ini benar-benar tercapai.
sumber
new_names <- c('setosa' = 'Bristle-pointed iris', 'versicolor' = 'Poison flag iris', 'virginica' = 'Virginia iris')
dan kemudian dalam bermutasi Anda dapat membuat kolom baru demikian:mutate(Spec = new_names[Species])
Ini bekerja untuk saya.
Tentukan faktor:
dan gunakan, di
ggplot()
:sumber
Hanya memperluas jawaban naught101 - kredit jatuh padanya
Yang harus Anda lakukan adalah membuat daftar dengan pemetaan nama-ke-nama
dan mendefinisikan kembali
plot_labeller()
dengan argumen default baru:Lalu:
Atau Anda dapat membuat fungsi khusus untuk setiap perubahan label yang ingin Anda miliki.
sumber
Saya memiliki cara lain untuk mencapai tujuan yang sama tanpa mengubah data yang mendasarinya:
Apa yang saya lakukan di atas adalah mengubah label faktor dalam bingkai data asli, dan itulah satu-satunya perbedaan dibandingkan dengan kode asli Anda.
sumber
Sudahkah Anda mencoba mengubah level spesifik
Hospital
vektor Anda ?sumber
Saya merasa saya harus menambahkan jawaban saya untuk ini karena butuh waktu cukup lama untuk membuat ini bekerja:
Jawaban ini untuk Anda jika:
bquote
) di label danSaya pada dasarnya menempatkan label dalam vektor bernama sehingga label tidak akan bingung atau beralih. The
labeller
ekspresi mungkin bisa lebih sederhana, tapi ini setidaknya karya (perbaikan sangat menyambut). Perhatikan `(kutipan kembali) untuk melindungi faktor-segi.sumber
Solusi sederhana (dari sini ):
sumber
Setelah berjuang sebentar, apa yang saya temukan adalah bahwa kita dapat menggunakan
fct_relevel()
danfct_recode()
dariforcats
dalam hubungannya untuk mengubah urutan sisi serta memperbaiki label sisi. Saya tidak yakin apakah itu didukung oleh desain, tetapi itu berhasil! Lihatlah plot di bawah ini:Dibuat pada 2020-02-16 oleh paket reprex (v0.3.0)
sumber