R peta panas ggplot2, paksa skala diskrit dengan rentang khusus, tambahkan kisi ke peta

Saya membuat peta panas di bawah ini

peta panas

yang saya gunakan kode ini:

library(ggplot2)
library(reshape2)

winners_min_expd0 <- matrix(c(NA, 2, 2, 3, NA, 3, 2, 2, NA), nrow=3, ncol=3, byrow = T)
colnames(winners_min_expd0) <- c("homophily","heterophily","preferential")
rownames(winners_min_expd0) <- c("homophily","heterophily","preferential")
melted_min_expd0 <- melt(winners_min_expd0)
colnames(melted_min_expd0) <- c("winning", "looses", "times")
p_min_expd0 <- ggplot(melted_min_expd0, aes(looses, winning)) +
   geom_tile(aes(fill = times), colour = "white") +
   scale_fill_gradient(low = "white", high = "red") +
   ggtitle("Min function, exp decay off") +
   scale_y_discrete(limits=c("preferential", "heterophily", "homophily")) +
   xlab("(x) looses against (y)") + ylab("(y) winning over (x)")
p_min_expd0

Aku mau sih:

  • mengubah skala bilah "kali" ke rentang <0:5>, saya mengerti tidak ada nilai {0,1,4,5}, tetapi saya ingin memiliki rentang ini
  • buat skala panas "kali" menjadi diskrit, yang berarti satu warna solid untuk satu angka, mis. 5 = hot red, 4 = red, dll. (kemungkinan duplikat: peta panas ggplot2 dengan warna untuk nilai berkisar), rentang seperti <0,1) dapat diterima, namun saya lebih memilih bilangan asli tunggal pada skala (daripada rentang nilai)
  • tambahkan kotak tipis pada peta panas, sehingga semua ubin (termasuk ubin putih) dipisahkan olehnya
  • ubah warna abu-abu nilai NA menjadi abu-abu terang

Bantuan dihargai, serta kode yang lebih pendek.
Terima kasih!


person oski86    schedule 03.07.2015    source sumber


Jawaban (1)


Berikut beberapa modifikasinya

p_min_expd0 <- ggplot(melted_min_expd0, aes(looses, winning)) +
   geom_tile(aes(fill = cut(times, breaks=0:5, labels=1:5)), colour = "grey") +
   ggtitle("Min function, exp decay off") +
   scale_y_discrete(limits=c("preferential", "heterophily", "homophily")) +
   scale_fill_manual(drop=FALSE, values=colorRampPalette(c("white","red"))(5), na.value="#EEEEEE", name="Times") + 
   xlab("(x) looses against (y)") + ylab("(y) winning over (x)")

Karena Anda menginginkan skala diskrit, Anda dapat memenuhi dua "keinginan" pertama Anda dengan melakukan konversi sendiri menggunakan cut(). Ini membuat variabel diskrit dari variabel kontinu. Karena sekarang kita menggunakan skala deiskrit, kita harus mengatur sendiri jalur warnanya dengan scale_fill_manual. Warna "kisi" diatur dengan parameter colour= di geom_tile. Warna NA diatur dengan scale_fill_maual(na.value=).

masukkan deskripsi gambar di sini

person MrFlick    schedule 03.07.2015
comment
Saya perhatikan pertanyaan saya tidak disukai. Apakah menurut Anda saya kurang melakukan penelitian, atau mungkin saya menggunakan gaya penulisan yang tidak tepat? Saya ingin menjadi pengguna SO yang lebih baik. Terima kasih atas sarannya. - person oski86; 03.07.2015
comment
Pada dasarnya Anda baru saja memposting daftar editan yang akan dilakukan pada plot Anda dan meminta seseorang melakukannya untuk Anda. Masing-masing tugas tersebut mungkin sudah memiliki jawabannya di sini di SO. Cukup dengan menanyakan satu pertanyaan yang jelas dan terfokus pada satu waktu dan menunjukkan bahwa Anda berupaya untuk menjawabnya sendiri. tetapi Anda melakukan pekerjaan dengan baik termasuk contoh yang dapat direproduksi yang sangat membantu. - person MrFlick; 03.07.2015