আর এর মধ্যে বেশ কয়েকটি স্বতন্ত্র রঙ কীভাবে তৈরি করা যায়?


130

আমি একটি শ্রেণিবদ্ধ ডেটাসেটের প্লট করছি এবং বিভিন্ন বিভাগের প্রতিনিধিত্ব করার জন্য স্বতন্ত্র রং ব্যবহার করতে চাই। একটি নম্বর দেওয়া n, আমি কীভাবে nআর এর মধ্যে সবচেয়ে বেশি স্বতন্ত্র রঙ পেতে পারি ? ধন্যবাদ।



উত্তর:


108

আমি RColorBrewerপ্যাকেজ থেকে সমস্ত গুণগত প্যালেটগুলিতে যোগদান করেছি । গুণগত প্যালেটগুলি প্রতিটি এক্সকে স্বতন্ত্র রঙ সরবরাহ করার কথা provide অবশ্যই, তাদের মিশ্রণটি একই প্যালেটের সাথেও একই রকম রঙে মিশে যায় তবে এটিই আমি সেরা (74 টি রঙ) পেতে পারি।

library(RColorBrewer)
n <- 60
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',]
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
pie(rep(1,n), col=sample(col_vector, n))

colour_Brewer_qual_60

অন্যান্য সমাধান হ'ল গ্রাফিকাল ডিভাইস থেকে সমস্ত আর রঙ এবং সেগুলি থেকে নমুনা নিন। আমি ধূসর ছায়া গো খুব সাদৃশ্যযুক্ত সরান। এটি 433 রঙ দেয় gives

color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)]

20 রঙের সেট

pie(rep(1,n), col=sample(color, n))

200 রঙ সহ n = 200:

pie(rep(1,n), col=sample(color, n))

200 রঙের সেট


হেক্স কোডগুলি colকি রঙিন বর্ণের সাথে সম্পর্কিত রূপান্তর করতে পারে?
প্রেরাদেপ

@ প্রডাপ colআপনি কি বোঝাতে চাইছেন? colorগ্রাফিক্যাল ডিভাইস থেকে নাম হয়েছে। যদি আপনি সাধারণভাবে বোঝাতে চান তবে সমস্ত হেক্স কোডের বর্ণের বর্ণ অনুসারে নয় (কেবলমাত্র 433 টি বর্ণ রয়েছে grDevicesতবে আরও অনেকগুলি হেক্স কোড রয়েছে)
জেলিনাউক্লিনা

আমি আপনার কোড স্নিপেটে প্যাকেজ col=sample(col_vector, n)থেকে উল্লেখ করছি RColorBrewer। উদাহরণস্বরূপ, কীভাবে রঙের নামগুলি #B3E2CD, #E78AC3, #B3DE69পাওয়া যায় সেগুলি থেকে পাওয়া যায় sample(col_vector,3)। বিকল্পভাবে, সমস্ত brewer.palরঙের নাম সহ ফাংশন দ্বারা প্রদত্ত হেক্স কোডগুলি কীভাবে সন্ধান করতে হয় ।
-15

2
@ প্রেডেপ, যেমন RColorBrewerপ্যালেটগুলি grDevicesরঙ থেকে উদ্ভূত হয় না , যেগুলির নাম ম্যাপ করা থাকে তবে এটি কেবল হেক্স কোডগুলি, আমার জ্ঞান অনুসারে, আপনি এটি RColorBrewerপ্যালেটগুলি এমনকি গুণমানের সাথেও করতে পারবেন না ।
জেলেনাউকলিনা

1
@ আইটু তবে রঙগুলি পৃথক নয়। যদি একেবারে প্রয়োজন হয়, আমি আর তে "গ্রেডিয়েন্ট ক্রিয়েশন" সন্ধান করার পরামর্শ দেব এবং তারপরে রঙের এলোমেলোভাবে নমুনা ব্যবহার করব। তবে রঙগুলি থেকে উপাদানগুলিতে ম্যাপিং কাজ করবে না, মানুষের উপলব্ধি সম্ভবত 20 - 40 রঙগুলি পরিচালনা করতে পারে, বাকিটি তেমন আলাদা নয়।
JelenaČuklina

70

এখানে কয়েকটি বিকল্প রয়েছে:

  1. paletteফাংশনটি একবার দেখুন :

     palette(rainbow(6))     # six color rainbow
     (palette(gray(seq(0,.9,len = 25)))) #grey scale
  2. এবং colorRampPaletteফাংশন:

     ##Move from blue to red in four colours
     colorRampPalette(c("blue", "red"))( 4) 
  3. colorBrewerপ্যাকেজ (এবং ওয়েবসাইট )। আপনি যদি রঙগুলি ডাইভারিং করতে চান তবে সাইটে ডাইভারিং নির্বাচন করুন। উদাহরণ স্বরূপ,

     library(colorBrewer)
     brewer.pal(7, "BrBG")
  4. আমি চাই রঙ ওয়েব সাইটে চমৎকার প্যালেট প্রচুর দেয়। আবার, আপনার প্রয়োজনীয় প্যালেটটি কেবল নির্বাচন করুন। উদাহরণস্বরূপ, আপনি সাইট থেকে আরজিবি রঙগুলি পেতে এবং আপনার নিজস্ব প্যালেট তৈরি করতে পারেন:

     palette(c(rgb(170,93,152, maxColorValue=255),
         rgb(103,143,57, maxColorValue=255),
         rgb(196,95,46, maxColorValue=255),
         rgb(79,134,165, maxColorValue=255),
         rgb(205,71,103, maxColorValue=255),
         rgb(203,77,202, maxColorValue=255),
         rgb(115,113,206, maxColorValue=255)))

আপনার উত্তরের জন্য ধন্যবাদ. এটি রঙ উত্পন্ন করে, তবে কিছু একে অপরের সাথে খুব স্বতন্ত্র নয়। আমার প্রশ্নগুলিতে আমার আরও বেশি জোর দেওয়া উচিত ছিল।
আরএনএ

1
@ আরএনএয়ার আমি আমার উত্তর আপডেট করেছি। প্যালেটগুলি ডাইভারিং করতে আপনি 3 এবং 4 টি পরামর্শ ব্যবহার করতে পারেন ।
csgillespie

1
I want hueএকটি দুর্দান্ত ওয়েবসাইট। এটি আমি যা চাই ঠিক তাই। একটি নম্বর দেওয়া হয়েছে, কীভাবে রঙের সংখ্যার একটি প্যালেট তৈরি করা যায়। তবে আমরা কি এটি আর-তে স্বয়ংক্রিয়ভাবে করতে পারি?
আরএনএ

এটা খুবই সুন্দর. তবে, সেই ওয়েবসাইটটির পিছনে প্রচুর যন্ত্রপাতি রয়েছে। আমি মনে করি না এটি পুনরায় বাস্তবায়নের ক্ষেত্রে তুচ্ছ হবে। এটি i want hueএমন একটি API ছিল যা এটি স্বয়ংক্রিয়ভাবে জিজ্ঞাসা করার অনুমতি দেয় (যদি এটি হয় - আমি বেশিক্ষণ ব্যয় করিনি) ভাল লাগবে
বেন বলকার

8
@BenBolker - আমি একজন আর সংস্করণ জন্য একটি সারকথা তৈরি করেছি i want hue, এখানে । দক্ষতার উন্নতি করা যেতে পারে (যেমন রঙের নমুনাগুলিকে ডেটা অবজেক্ট হিসাবে সংরক্ষণ করে) তবে সাধারণ ধারণাটি সেখানে। (লোড সহ devtools::source_gist('45b49da5e260a9fc1cd7'))
জবাউমস

36

আপনি randomcoloRপ্যাকেজ চেষ্টা করতে পারেন :

library(randomcoloR)
n <- 20
palette <- distinctColorPalette(n)

আপনি দেখতে পাচ্ছেন যে পাই চার্টে ভিজ্যুয়ালাইজ করার সময় অত্যন্ত স্বতন্ত্র রঙের একটি সেট বেছে নেওয়া হয়েছে (এখানে অন্যান্য উত্তরগুলির দ্বারা প্রস্তাবিত হিসাবে):

pie(rep(1, n), col=palette)

এখানে চিত্র বর্ণনা লিখুন

50 টি রঙ সহ পাই চার্টে দেখানো হয়েছে:

n <- 50
palette <- distinctColorPalette(n)
pie(rep(1, n), col=palette)

এখানে চিত্র বর্ণনা লিখুন


3
ধন্যবাদ। unname(distinctColorPalette(n))জিপিপ্লট দিয়ে এই কাজটি করতে আমাকে ব্যবহার করতে হয়েছিল। আমার ধারণা ggplot একটি নামবিহীন ভেক্টর প্রয়োজন। col_vector <- unname(distinctColorPalette(n))এবং তারপরে... + scale_color_manual(values=col_vector) ...
গৌরব

19

ওপির প্রশ্নের উত্তর নয় তবে এটি উল্লেখ করার মতো যে viridisপ্যাকেজটি রয়েছে যাতে ক্রমযুক্ত ডেটার জন্য ভাল রঙের প্যালেট রয়েছে। এগুলি ধারণাগতভাবে অভিন্ন, রঙিন সংমিশ্রিত নিরাপদ এবং প্রিন্টার বান্ধব।

প্যালেটটি পেতে, কেবল প্যাকেজটি ইনস্টল করুন এবং ফাংশনটি ব্যবহার করুন viridis_pal()। "এ", "বি", "সি" এবং "ডি" বেছে নিতে চারটি বিকল্প রয়েছে

install.packages("viridis")
library(viridis)
viridis_pal(option = "D")(n)  # n = number of colors seeked

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

ইউটিউবে ভাল কালার ম্যাপগুলির জটিলতা ব্যাখ্যা করার জন্য একটি দুর্দান্ত কথাও রয়েছে:

ম্যাটপ্ল্লোলিবের জন্য একটি আরও ভাল ডিফল্ট রঙিনম্যাপ | SciPy 2015 | নাথানিয়েল স্মিথ এবং স্টাফান ভ্যান ডার ওয়াল্ট


17
এটি স্বতন্ত্র রঙের জন্য এতটা উপযুক্ত নয়।
ক্রিস্টোফার জন

13

আপনি colorRampPaletteবেস বা RColorBrewerপ্যাকেজ থেকে ব্যবহার করতে পারেন :

এর সাথে colorRampPalette, আপনি নিম্নরূপ রঙ নির্দিষ্ট করতে পারেন:

colorRampPalette(c("red", "green"))(5)
# [1] "#FF0000" "#BF3F00" "#7F7F00" "#3FBF00" "#00FF00"

আপনি বিকল্পভাবে হেক্স কোডও সরবরাহ করতে পারেন:

colorRampPalette(c("#3794bf", "#FFFFFF", "#df8640"))(5)
# [1] "#3794BF" "#9BC9DF" "#FFFFFF" "#EFC29F" "#DF8640"
# Note that the mid color is the mid value...

সঙ্গে RColorBrewerআপনি পূর্ব বিদ্যমান প্যালেট থেকে রং ব্যবহার করতে পারে:

require(RColorBrewer)
brewer.pal(9, "Set1")
# [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF"
# [9] "#999999"

RColorBrewerঅন্যান্য উপলব্ধ প্যালেটগুলির জন্য প্যাকেজটি দেখুন । আশাকরি এটা সাহায্য করবে.


1
ধন্যবাদ। আমি শেষ বিকল্পটি পছন্দ করি brewer.pal। তবে এটি 9 টি রঙ পর্যন্ত সীমাবদ্ধ। আমার আসলে 9 টিরও বেশি বিভাগ রয়েছে। প্রথম বিকল্পগুলি গ্রেডিয়েন্ট রঙ উত্পন্ন করে, যা আমি চাই তেমন স্বতন্ত্র নয়।
আরএনএ

2
আপনি অনেকগুলি "স্বতন্ত্র" রঙ চয়ন করতে পারবেন না। আমি মনে করি আপনি সর্বাধিক 12 পেতে পারেন। আপনার colorbrewer2.org চেক করা উচিত এবং রঙগুলি পাওয়া উচিত (আমি ঠিক থাকলে 1 টি রঙিন প্যালেট রয়েছে)।
অরুণ

12 টিরও বেশি স্বতন্ত্র কলামগুলি অনুসন্ধান করা কঠিন হবে - আমি মনে করি রঙব্রাউজার পৃষ্ঠায় সে সম্পর্কে আলোচনা হয়েছে
অ্যালেক্সওয়ান

এটি ঠিক আছে, যতক্ষণ না এগুলি "সর্বাধিক" স্বতন্ত্র রঙ উপলব্ধ, ততক্ষণ পর্যন্ত তারা সংখ্যাটি বাড়ার সাথে সাথে স্বতন্ত্র হয়ে উঠবে।
আরএনএ

3
যদি আপনার সমস্যাটি সংলগ্ন বিভাগগুলিতে বরাদ্দকৃত পাশাপাশি একই রঙের হয় (যেমন রংধনু প্যালেটটি করবে), তবে আপনি কেবল রংধনু (এন = 10) এর মতো কিছু দিয়ে রংধনুর আউটপুটটিকে এলোমেলো করে ফেলতে পারেন: [নমুনা (10)]
ডেভিড রবার্টস

11

আমি বড় রঙের প্যালেটগুলির জন্য একটি বাহ্যিক উত্স ব্যবহার করার জন্য পুনঃসংশোধন করব।

http://tools.medialab.sciences-po.fr/iwanthue/

বিভিন্ন পরামিতি এবং অনুযায়ী প্যালেটের কোনও আকার রচনা করার জন্য একটি পরিষেবা রয়েছে

/graphicdesign/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815

গ্রাফিক্স ডিজাইনার দৃষ্টিকোণ থেকে জেনেরিক সমস্যাটি আলোচনা করে এবং ব্যবহারযোগ্য প্যালেটগুলির উদাহরণ দেয়।

আরজিবি মান থেকে একটি প্যালেট সমন্বিত করতে আপনাকে কেবল যেমন ভেক্টরে মূল্যগুলি অনুলিপি করতে হবে যেমন:

colors37 = c("#466791","#60bf37","#953ada","#4fbe6c","#ce49d3","#a7b43d","#5a51dc","#d49f36","#552095","#507f2d","#db37aa","#84b67c","#a06fda","#df462a","#5b83db","#c76c2d","#4f49a3","#82702d","#dd6bbb","#334c22","#d83979","#55baad","#dc4555","#62aad3","#8c3025","#417d61","#862977","#bba672","#403367","#da8a6d","#a79cd4","#71482c","#c689d0","#6b2940","#d593a7","#895c8b","#bd5975")

3

আমি 20 টি স্বতন্ত্র রঙের একটি তালিকা সরবরাহকারী একটি ওয়েবসাইট পেয়েছি: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/

col_vector<-c('#e6194b', '#3cb44b', '#ffe119', '#4363d8', '#f58231', '#911eb4', '#46f0f0', '#f032e6', '#bcf60c', '#fabebe', '#008080', '#e6beff', '#9a6324', '#fffac8', '#800000', '#aaffc3', '#808000', '#ffd8b1', '#000075', '#808080', '#ffffff', '#000000')

আপনি চেষ্টা করতে পারেন!


1
এটি প্রকৃতপক্ষে প্রশ্নের উত্তর দেয় না, যা n নির্দিষ্ট রঙ উত্পন্ন করার বিষয়ে, সংজ্ঞায়িত রঙের সেট নয়। আপনার উত্তর আপডেট করার চেষ্টা করুন
মাইকেল

1

আপনি এর মতো রঙের সেট তৈরি করতে পারেন:

myCol = c("pink1", "violet", "mediumpurple1", "slateblue1", "purple", "purple3",
          "turquoise2", "skyblue", "steelblue", "blue2", "navyblue",
          "orange", "tomato", "coral2", "palevioletred", "violetred", "red2",
          "springgreen2", "yellowgreen", "palegreen4",
          "wheat2", "tan", "tan2", "tan3", "brown",
          "grey70", "grey50", "grey30")

এই রঙগুলি যথাসম্ভব স্বতন্ত্র। অনুরূপ রঙগুলির জন্য, তারা একটি গ্রেডিয়েন্ট গঠন করে যাতে আপনি সহজেই তাদের মধ্যে পার্থক্যগুলি বলতে পারেন।


0

আমার বোধগম্যতে আলাদা রঙগুলি অনুসন্ধান করা ইউনিট কিউব থেকে দক্ষতার সাথে অনুসন্ধানের সাথে সম্পর্কিত, যেখানে ঘনকটির 3 টি মাত্রা লাল, সবুজ এবং নীল অক্ষের পাশাপাশি তিনটি ভেক্টর রয়েছে। এটি সিলিন্ডারে (এইচএসভি উপমা) অনুসন্ধান করতে সরল করা যেতে পারে, যেখানে আপনি স্যাচুরেশন (এস) এবং মান (ভি) ঠিক করেন এবং এলোমেলো হিউ মান খুঁজে পাবেন। এটি অনেক ক্ষেত্রে কাজ করে এবং এখানে এটি দেখুন:

https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/

আর তে,

get_distinct_hues <- function(ncolor,s=0.5,v=0.95,seed=40) {
  golden_ratio_conjugate <- 0.618033988749895
  set.seed(seed)
  h <- runif(1)
  H <- vector("numeric",ncolor)
  for(i in seq_len(ncolor)) {
    h <- (h + golden_ratio_conjugate) %% 1
    H[i] <- h
  }
  hsv(H,s=s,v=v)
}

বিকল্প উপায় হ'ল আর প্যাকেজটি "অভিন্ন" ব্যবহার করা https://cran.r-project.org/web/packages/uniformly/index.html

এবং এই সাধারণ ফাংশনটি স্বতন্ত্র রঙ তৈরি করতে পারে:

get_random_distinct_colors <- function(ncolor,seed = 100) {
  require(uniformly)
  set.seed(seed)
  rgb_mat <- runif_in_cube(n=ncolor,d=3,O=rep(0.5,3),r=0.5)
  rgb(r=rgb_mat[,1],g=rgb_mat[,2],b=rgb_mat[,3])
}

গ্রিড-অনুসন্ধানের মাধ্যমে কেউ আরও কিছুটা জড়িত ক্রিয়াকলাপটি ভাবতে পারেন:

get_random_grid_colors <- function(ncolor,seed = 100) {
  require(uniformly)
  set.seed(seed)
  ngrid <- ceiling(ncolor^(1/3))
  x <- seq(0,1,length=ngrid+1)[1:ngrid]
  dx <- (x[2] - x[1])/2
  x <- x + dx
  origins <- expand.grid(x,x,x)
  nbox <- nrow(origins) 
  RGB <- vector("numeric",nbox)
  for(i in seq_len(nbox)) {
    rgb <- runif_in_cube(n=1,d=3,O=as.numeric(origins[i,]),r=dx)
    RGB[i] <- rgb(rgb[1,1],rgb[1,2],rgb[1,3])
  }
  index <- sample(seq(1,nbox),ncolor)
  RGB[index]
} 

এই ফাংশনগুলি দ্বারা পরীক্ষা করুন:

ncolor <- 20
barplot(rep(1,ncolor),col=get_distinct_hues(ncolor))          # approach 1
barplot(rep(1,ncolor),col=get_random_distinct_colors(ncolor)) # approach 2
barplot(rep(1,ncolor),col=get_random_grid_colors(ncolor))     # approach 3

তবে লক্ষ করুন যে, মানুষের উপলব্ধিযোগ্য রঙগুলির সাথে একটি পৃথক প্যালেট সংজ্ঞায়িত করা সহজ নয়। উপরোক্ত পদ্ধতির মধ্যে কোনটি বিভিন্ন রঙের সেট তৈরি করে তা এখনও পরীক্ষা করা যায়নি।


0

আপনি এই উদ্দেশ্যে পলিক্রোম প্যাকেজটি ব্যবহার করতে পারেন । এটির জন্য কেবল রঙের সংখ্যা এবং কয়েকটি দরকার seedcolors। উদাহরণ স্বরূপ:

# install.packages("Polychrome")
library(Polychrome)

# create your own color palette based on `seedcolors`
P36 = createPalette(36,  c("#ff0000", "#00ff00", "#0000ff"))
swatch(P36)

আপনি এই প্যাকেজটি সম্পর্কে https://www.jstatsoft.org/article/view/v090c01 এ আরও শিখতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.