Gradien n warna mulai dari warna 1 dan warna 2

108

Saya sering bekerja dengan ggplot2itu membuat gradien bagus ( klik di sini untuk contoh ). Saya memiliki kebutuhan untuk bekerja di basis dan saya pikir scalesdapat digunakan di sana untuk membuat gradien warna juga tetapi saya sangat melenceng tentang caranya. Tujuan dasarnya adalah menghasilkan palet warna n yang berkisar dari warna x ke warna y. Solusinya perlu bekerja di basis. Ini adalah titik awal tetapi tidak ada tempat untuk memasukkan n.

 scale_colour_gradientn(colours=c("red", "blue"))

Saya sangat menyadari:

brewer.pal(8, "Spectral") 

dari RColorBrewer. Saya mencari lebih banyak untuk pendekatan yang mirip dengan bagaimana ggplot2menangani gradien yang mengatakan saya memiliki dua warna ini dan saya ingin 15 warna di sepanjang jalan. Bagaimana saya bisa melakukan itu?

Tyler Rinker
sumber
1
Saya pikir Anda membutuhkan paket timbangan ; versi ggplot2 terbaru bergantung pada ini untuk kode yang mendasarinya. Yaitu Anda tidak memerlukan ggplot2 untuk menggunakan timbangan, Anda hanya perlu paket timbangan . Tidak tahu bagaimana fungsi dalam timbangan bekerja :-)
Gavin Simpson
1
Di luar topik karena Anda meminta basesecara khusus, tetapi saya merasa colourvalues( juga di CRAN ) sangat nyaman untuk memetakan nilai ke gradien. Ini juga cukup ringan (tergantung Rcpp).
MichaelChirico
@MichaelChirico Tidak keluar topik, yang saya maksud adalah bahwa saya perlu menggunakan plotting dasar karena paket yang saya gunakan ditulis dalam basis (menurut saya wordcloud) daripada grid. Mungkin memposting sebagai jawaban?
Tyler Rinker

Jawaban:

179

colorRampPalette bisa menjadi temanmu di sini:

colfunc <- colorRampPalette(c("black", "white"))
colfunc(10)
# [1] "#000000" "#1C1C1C" "#383838" "#555555" "#717171" "#8D8D8D" "#AAAAAA"
# [8] "#C6C6C6" "#E2E2E2" "#FFFFFF"

Dan hanya untuk menunjukkan bahwa itu berhasil:

plot(rep(1,10),col=colfunc(10),pch=19,cex=3)

masukkan deskripsi gambar di sini

thelatemail
sumber
14
Perhatikan bahwa jika Anda sangat terpikat dengan palet yang sudah ada sebelumnya, misalnya brewer.pal(8, "Spectral"), Anda dapat memberikan vektor warna yang colorRampPalettedihasilkan untuk menghasilkan lebih banyak warna di sepanjang jalan itu. Sebagai contoh: colorRampPalette(brewer.pal(8, "Spectral")).
jbaums
Bagaimana dengan warna dengan garis atau bentuk diagonoal pada balok? @thelatemail
pengguna3631848
50

Hanya untuk memperluas jawaban sebelumnya colorRampPalettedapat menangani lebih dari dua warna.

Jadi untuk tampilan jenis "peta panas" yang lebih diperluas, Anda dapat ....

colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue"))
plot(rep(1,50),col=(colfunc(50)), pch=19,cex=2)

Gambar yang dihasilkan:

masukkan deskripsi gambar di sini

jsol
sumber
dapatkah saya juga menentukan garis atau bentuk diagonal dalam warna? @jsol
user3631848
Saya suka palet ini tapi terlalu banyak warna hijau dan sangat sedikit kuning. Apakah ada cara untuk memperbaikinya?
Herman Toothrot
1
Menambahkan untuk orang lain yang tidak mengharapkan untuk melihat opsi seperti "springgreen" atau "royalblue". Semua warna yang tersedia untuk digunakan dapat dikembalikan sebagai daftar dengan menjalankan: colors ().
jadki
20

Coba yang berikut ini:

color.gradient <- function(x, colors=c("red","yellow","green"), colsteps=100) {
  return( colorRampPalette(colors) (colsteps) [ findInterval(x, seq(min(x),max(x), length.out=colsteps)) ] )
}
x <- c((1:100)^2, (100:1)^2)
plot(x,col=color.gradient(x), pch=19,cex=2)

masukkan deskripsi gambar di sini

Daniel Hoop
sumber
fungsi ini harus ditambahkan sebagai default di basis R!
Simon C.
7

Jawaban di atas berguna tetapi dalam grafik, sulit untuk membedakan antara gradien hitam yang lebih gelap. Salah satu alternatif yang saya temukan adalah dengan menggunakan gradien warna abu-abu sebagai berikut

palette(gray.colors(10, 0.9, 0.4))
plot(rep(1,10),col=1:10,pch=19,cex=3))

Info lebih lanjut tentang skala abu-abu di sini.

Ditambahkan

Ketika saya menggunakan kode di atas untuk berbagai warna seperti biru dan hitam, gradiennya tidak begitu jelas. heat.colors()sepertinya lebih berguna.

Dokumen ini memiliki informasi dan opsi yang lebih rinci. pdf

Anusha
sumber
2
Saya pikir jawaban ini lebih unggul untuk hitam ke putih tetapi tidak dapat digeneralisasikan untuk warna. Terima kasih telah menambahkan informasi berharga ini. +1
Tyler Rinker
Menambahkan tautan yang memberikan opsi yang lebih baik untuk gradien warna dan corak yang berfungsi pada warna dan Hitam Putih.
Anusha
@DavidDelMonte Saya mungkin memiliki salinan file yang disimpan tetapi bukan tautan yang diperbarui. Tidak yakin di mana akan mengunggahnya.
Anusha
2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/… periksa archive.org dulu selalu.
thelatemail