আমি একটি শ্রেণিবদ্ধ ডেটাসেটের প্লট করছি এবং বিভিন্ন বিভাগের প্রতিনিধিত্ব করার জন্য স্বতন্ত্র রং ব্যবহার করতে চাই। একটি নম্বর দেওয়া n
, আমি কীভাবে n
আর এর মধ্যে সবচেয়ে বেশি স্বতন্ত্র রঙ পেতে পারি ? ধন্যবাদ।
আমি একটি শ্রেণিবদ্ধ ডেটাসেটের প্লট করছি এবং বিভিন্ন বিভাগের প্রতিনিধিত্ব করার জন্য স্বতন্ত্র রং ব্যবহার করতে চাই। একটি নম্বর দেওয়া n
, আমি কীভাবে n
আর এর মধ্যে সবচেয়ে বেশি স্বতন্ত্র রঙ পেতে পারি ? ধন্যবাদ।
উত্তর:
আমি 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))
অন্যান্য সমাধান হ'ল গ্রাফিকাল ডিভাইস থেকে সমস্ত আর রঙ এবং সেগুলি থেকে নমুনা নিন। আমি ধূসর ছায়া গো খুব সাদৃশ্যযুক্ত সরান। এটি 433 রঙ দেয় gives
color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)]
pie(rep(1,n), col=sample(color, n))
200 রঙ সহ n = 200
:
pie(rep(1,n), col=sample(color, n))
col
কি রঙিন বর্ণের সাথে সম্পর্কিত রূপান্তর করতে পারে?
col
আপনি কি বোঝাতে চাইছেন? color
গ্রাফিক্যাল ডিভাইস থেকে নাম হয়েছে। যদি আপনি সাধারণভাবে বোঝাতে চান তবে সমস্ত হেক্স কোডের বর্ণের বর্ণ অনুসারে নয় (কেবলমাত্র 433 টি বর্ণ রয়েছে grDevices
তবে আরও অনেকগুলি হেক্স কোড রয়েছে)
col=sample(col_vector, n)
থেকে উল্লেখ করছি RColorBrewer
। উদাহরণস্বরূপ, কীভাবে রঙের নামগুলি #B3E2CD, #E78AC3, #B3DE69
পাওয়া যায় সেগুলি থেকে পাওয়া যায় sample(col_vector,3)
। বিকল্পভাবে, সমস্ত brewer.pal
রঙের নাম সহ ফাংশন দ্বারা প্রদত্ত হেক্স কোডগুলি কীভাবে সন্ধান করতে হয় ।
RColorBrewer
প্যালেটগুলি grDevices
রঙ থেকে উদ্ভূত হয় না , যেগুলির নাম ম্যাপ করা থাকে তবে এটি কেবল হেক্স কোডগুলি, আমার জ্ঞান অনুসারে, আপনি এটি RColorBrewer
প্যালেটগুলি এমনকি গুণমানের সাথেও করতে পারবেন না ।
এখানে কয়েকটি বিকল্প রয়েছে:
palette
ফাংশনটি একবার দেখুন :
palette(rainbow(6)) # six color rainbow
(palette(gray(seq(0,.9,len = 25)))) #grey scale
এবং colorRampPalette
ফাংশন:
##Move from blue to red in four colours
colorRampPalette(c("blue", "red"))( 4)
এ colorBrewer
প্যাকেজ (এবং ওয়েবসাইট )। আপনি যদি রঙগুলি ডাইভারিং করতে চান তবে সাইটে ডাইভারিং নির্বাচন করুন। উদাহরণ স্বরূপ,
library(colorBrewer)
brewer.pal(7, "BrBG")
আমি চাই রঙ ওয়েব সাইটে চমৎকার প্যালেট প্রচুর দেয়। আবার, আপনার প্রয়োজনীয় প্যালেটটি কেবল নির্বাচন করুন। উদাহরণস্বরূপ, আপনি সাইট থেকে আরজিবি রঙগুলি পেতে এবং আপনার নিজস্ব প্যালেট তৈরি করতে পারেন:
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)))
I want hue
একটি দুর্দান্ত ওয়েবসাইট। এটি আমি যা চাই ঠিক তাই। একটি নম্বর দেওয়া হয়েছে, কীভাবে রঙের সংখ্যার একটি প্যালেট তৈরি করা যায়। তবে আমরা কি এটি আর-তে স্বয়ংক্রিয়ভাবে করতে পারি?
i want hue
এমন একটি API ছিল যা এটি স্বয়ংক্রিয়ভাবে জিজ্ঞাসা করার অনুমতি দেয় (যদি এটি হয় - আমি বেশিক্ষণ ব্যয় করিনি) ভাল লাগবে
আপনি 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)
unname(distinctColorPalette(n))
জিপিপ্লট দিয়ে এই কাজটি করতে আমাকে ব্যবহার করতে হয়েছিল। আমার ধারণা ggplot একটি নামবিহীন ভেক্টর প্রয়োজন। col_vector <- unname(distinctColorPalette(n))
এবং তারপরে... + scale_color_manual(values=col_vector) ...
ওপির প্রশ্নের উত্তর নয় তবে এটি উল্লেখ করার মতো যে viridis
প্যাকেজটি রয়েছে যাতে ক্রমযুক্ত ডেটার জন্য ভাল রঙের প্যালেট রয়েছে। এগুলি ধারণাগতভাবে অভিন্ন, রঙিন সংমিশ্রিত নিরাপদ এবং প্রিন্টার বান্ধব।
প্যালেটটি পেতে, কেবল প্যাকেজটি ইনস্টল করুন এবং ফাংশনটি ব্যবহার করুন viridis_pal()
। "এ", "বি", "সি" এবং "ডি" বেছে নিতে চারটি বিকল্প রয়েছে
install.packages("viridis")
library(viridis)
viridis_pal(option = "D")(n) # n = number of colors seeked
ইউটিউবে ভাল কালার ম্যাপগুলির জটিলতা ব্যাখ্যা করার জন্য একটি দুর্দান্ত কথাও রয়েছে:
আপনি 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
অন্যান্য উপলব্ধ প্যালেটগুলির জন্য প্যাকেজটি দেখুন । আশাকরি এটা সাহায্য করবে.
brewer.pal
। তবে এটি 9 টি রঙ পর্যন্ত সীমাবদ্ধ। আমার আসলে 9 টিরও বেশি বিভাগ রয়েছে। প্রথম বিকল্পগুলি গ্রেডিয়েন্ট রঙ উত্পন্ন করে, যা আমি চাই তেমন স্বতন্ত্র নয়।
আমি বড় রঙের প্যালেটগুলির জন্য একটি বাহ্যিক উত্স ব্যবহার করার জন্য পুনঃসংশোধন করব।
http://tools.medialab.sciences-po.fr/iwanthue/
বিভিন্ন পরামিতি এবং অনুযায়ী প্যালেটের কোনও আকার রচনা করার জন্য একটি পরিষেবা রয়েছে
গ্রাফিক্স ডিজাইনার দৃষ্টিকোণ থেকে জেনেরিক সমস্যাটি আলোচনা করে এবং ব্যবহারযোগ্য প্যালেটগুলির উদাহরণ দেয়।
আরজিবি মান থেকে একটি প্যালেট সমন্বিত করতে আপনাকে কেবল যেমন ভেক্টরে মূল্যগুলি অনুলিপি করতে হবে যেমন:
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")
আমি 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')
আপনি চেষ্টা করতে পারেন!
n
নির্দিষ্ট রঙ উত্পন্ন করার বিষয়ে, সংজ্ঞায়িত রঙের সেট নয়। আপনার উত্তর আপডেট করার চেষ্টা করুন
আপনি এর মতো রঙের সেট তৈরি করতে পারেন:
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")
এই রঙগুলি যথাসম্ভব স্বতন্ত্র। অনুরূপ রঙগুলির জন্য, তারা একটি গ্রেডিয়েন্ট গঠন করে যাতে আপনি সহজেই তাদের মধ্যে পার্থক্যগুলি বলতে পারেন।
আমার বোধগম্যতে আলাদা রঙগুলি অনুসন্ধান করা ইউনিট কিউব থেকে দক্ষতার সাথে অনুসন্ধানের সাথে সম্পর্কিত, যেখানে ঘনকটির 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
তবে লক্ষ করুন যে, মানুষের উপলব্ধিযোগ্য রঙগুলির সাথে একটি পৃথক প্যালেট সংজ্ঞায়িত করা সহজ নয়। উপরোক্ত পদ্ধতির মধ্যে কোনটি বিভিন্ন রঙের সেট তৈরি করে তা এখনও পরীক্ষা করা যায়নি।
আপনি এই উদ্দেশ্যে পলিক্রোম প্যাকেজটি ব্যবহার করতে পারেন । এটির জন্য কেবল রঙের সংখ্যা এবং কয়েকটি দরকার 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 এ আরও শিখতে পারেন ।