Saya memiliki perintah ggplot
ggplot( rates.by.groups, aes(x=name, y=rate, colour=majr, group=majr) )
di dalam suatu fungsi. Tapi saya ingin bisa menggunakan parameter fungsi untuk memilih kolom yang akan digunakan sebagai warna dan grup. Yaitu saya ingin sesuatu seperti ini
f <- function( column ) {
...
ggplot( rates.by.groups, aes(x=name, y=rate, colour= ??? , group=??? ) )
}
Sehingga kolom yang digunakan pada ggplot ditentukan oleh parameter. Misalnya untuk f ("majr") kita mendapatkan efek
ggplot( rates.by.groups, aes(x=name, y=rate, colour=majr, group=majr) )
tapi untuk f ("gender") kita mendapatkan efek
ggplot( rates.by.groups, aes(x=name, y=rate, colour=gender, group=gender) )
Beberapa hal yang saya coba:
ggplot( rates.by.groups, aes(x=name, y=rate, colour= columnName , group=columnName ) )
tidak bekerja. Tidak juga
e <- environment()
ggplot( rates.by.groups, aes(x=name, y=rate, colour= columnName , group=columnName ), environment=e )
aes_string(x = rates.by.groups$name...
, dan bagaimanapun Anda tidak perlu melakukannya karena Anda sudah menyampaikanggplot(data = rates.by.groups...
argumen. (Masalah dalam pertanyaan ini )"column_name"
atau"column"
tidak akan berhasilDari catatan rilis dari
ggplot2 V3.0.0
:Cara idiomatik sekarang adalah mengonversi ke simbol string yang berisi variabel, menggunakan
sym()
(yang hampir sama dengan alias basisas.name()
/as.symbol()
), dan menghapusnya menggunakan!!
Mensimulasikan data OP dapat kita lakukan:
Jika kita lebih suka memberi nama mentah ke fungsi yang bisa kita lakukan:
Ini akan bekerja dengan nama alias simbol DAN dengan string literal
Seperti yang dikatakan Lionel tentang
ensym()
:Catatan tentang
enquo()
enquo()
mengutip ekspresi (tidak harus simbol) yang dimasukkan ke argumen, itu tidak mengubah string literal menjadi simbol seperti yangensym()
dilakukan sehingga mungkin kurang diadaptasi di sini, tetapi kita bisa melakukan:sumber
aes()
dirinya sendiri berbicara tentangenquo()
tetapi tidak berhasil. Dan siapa yang pernah dengarensym()
sebelumnya? BIGf2
, keempat contoh bekerja, dan begitu juga dengan menangkap nama kolom dalam variabel (yaituaname <- "mjr"; f2(aname)
). Jika saya menambahkan kode untuk memanipulasi bingkai data yang menggunakannyadplyr
mencoba untuk menemukan kolom menggunakan nama variabel dan bukan string dalam nama variabel. Dengan kata lain, bagaimana cara saya berangkatrates.by.groups %>% group_by(!!column)...
kerja dan masih mendukung ketiga cara meneleponf2
?ensym
dirancang untuk menangani argumen yang diberikan sebagai nama, dan mentolerir tanda kutip di sekitarnya. Saya yakin Anda ingin memperlakukan argumen tersebut sebagai sebuah nama, dan menggunakan kembali nilainya jika nama tersebut tidak ditemukan. Ini sebenarnya yang terjadi denganselect
, tetapi tidak dengangroup_by
... Mungkin saja untuk meretasnya tetapi tidak jelas. Jika itu penting bagi Anda, saya pikir itu akan pantas mendapatkan pertanyaannya sendiri.select
dangroup_by
sepertinya itulah masalahnya. Saya dapat membuat pertanyaan baru, tetapi saya perlu memberikan contoh sederhana dan memeriksa apakah sudah terjawab. Saya dapat mempostingnya jika tidak.facet_grid
? Ia bekerja denganfacet_grid(cols = vars(!!column))
tetapifacet_grid(~ !!column)
Coba gunakan,
aes_string
bukanaes
.sumber
Opsi lain (
ggplot2 > 3.0.0
) adalah menggunakan kata ganti evaluasi rapi.data
untuk memotong variabel / kolom yang dipilih darirates.by.groups
bingkai data.Dibuat pada 2019-04-04 oleh paket reprex (v0.2.1.9000)
sumber
Menggunakan
aes_string
memang memperbaiki masalah ini, tetapi menghadapi masalah saat menambahkan bilah kesalahangeom_errorbar
. Di bawah ini adalah solusi sederhana.Bonus, Anda juga dapat menambahkan faset ke plot Anda menggunakan garis-garis ini di dalam ggplot:
Skrip ini telah diubah dari posting asli ini: ggplot2 - Bilah kesalahan menggunakan fungsi khusus
sumber
Inilah contoh yang sangat sederhana.
Lakukan dua hal
!!
saat Anda menggunakannyasumber