ম্যাটপ্লোটিলেব রঙের মানচিত্র থেকে পৃথক রঙ প্রাপ্ত


136

যদি আপনার কাছে কালারম্যাপ থাকে তবে cmapউদাহরণস্বরূপ:

cmap = matplotlib.cm.get_cmap('Spectral')

0 এবং 1 এর মধ্যে আপনি কীভাবে একটি নির্দিষ্ট রঙ বের করতে পারবেন, যেখানে মানচিত্রের 0 টি প্রথম রঙ এবং মানচিত্রে 1টি শেষ রঙ?

আদর্শভাবে, আমি মানচিত্রের মধ্যবর্তী রঙটি পেতে সক্ষম হবো:

>>> do_some_magic(cmap, 0.5) # Return an RGBA tuple
(0.1, 0.2, 0.3, 1.0)

উত্তর:


219

আপনি নীচের কোড দিয়ে এটি করতে পারেন, এবং আপনার প্রশ্নের কোডটি আসলে আপনার যা প্রয়োজন তার খুব কাছাকাছি ছিল, আপনাকে যা করতে হবে তা হ'ল আপনার কাছে থাকা cmapঅবজেক্টটিকে কল করা।

import matplotlib

cmap = matplotlib.cm.get_cmap('Spectral')

rgba = cmap(0.5)
print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0)

সীমার বাইরের মানগুলির জন্য [০.০, ১.০] এটি আন্ডার এবং ওভার বর্ণের (যথাক্রমে) ফেরত দেবে। এটি, ডিফল্টরূপে, ব্যাপ্তির মধ্যে ন্যূনতম এবং সর্বাধিক রঙ (তাই 0.0 এবং 1.0)। এই ডিফল্টটি cmap.set_under()এবং এর সাথে পরিবর্তন করা যেতে পারে cmap.set_over()

"বিশেষ" সংখ্যার জন্য np.nanএবং np.infডিফল্টটি 0.0 মান ব্যবহার করা হয়, এটি cmap.set_bad()উপরের নীচে এবং উপরের মতো একইভাবে ব্যবহার করে পরিবর্তন করা যেতে পারে ।

অবশেষে আপনার পক্ষে আপনার ডেটাটিকে স্বাভাবিককরণের প্রয়োজন হতে পারে যা এটি পরিসীমা অনুসারে [0.0, 1.0]। এই ব্যবহার করে কাজ করা যেতে পারে matplotlib.colors.Normalizeকেবল কোথায় আর্গুমেন্ট নিচে ছোট উদাহরণে দেখানো vminএবং vmaxবর্ণনা কি নম্বর 0.0 এবং 1.0 যথাক্রমে ম্যাপ দিতে হবে।

import matplotlib

norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0)

print(norm(15.0)) # 0.5

লোগারিদমিক নরমালাইজার ( ম্যাটপ্লটলিব.ক্লোরস.লগনর্ম ) একটি বৃহত পরিসরের মান সহ ডেটা রেঞ্জের জন্য উপলব্ধ।

( উত্তর কীভাবে উন্নত করতে হবে সে সম্পর্কে পরামর্শের জন্য জো কিংটন এবং টিসওয়েল উভয়কেই ধন্যবাদ ))


3
আসলে, 0 এর কম বা 1 এরও বেশি মানের জন্য এটি "ওভার" বা "আন্ডার" রঙটি ফিরিয়ে দেবে। ডিফল্টরূপে এটি রঙিন মানচিত্রের নীচে / শীর্ষে বর্ণটি, তবে এটি পরিবর্তনযোগ্য। উদাহরণস্বরূপ: cmap.set_under('red'); print cmap(0.0), cmap(-0.01)
জো কিংটন

হাই @ জো, সংশোধনের জন্য ধন্যবাদ, আমি আমার উত্তরটি পরিবর্তন করেছি :)
Ffisegydd

এছাড়াও আছে set_badযা সংজ্ঞায়িত করে যা জন্য np.nanএবং np.infiirc কী করে। আপনার Normalizeপাশাপাশি পদ্ধতিগুলি উল্লেখ করা উচিত ।
টাকসওয়েল

12
খুব দরকারী তথ্য এবং পৃথিবীতে কেন ডকুমেন্টেশনে এটি সন্ধান করা অসম্ভব !?!
জাপ এল্ডারিং

10
যদি এটি কারও পক্ষে কাজ করে না, এবং আপনি দেখতে পান module 'matplotlib' has no attribute 'cm'তবে প্রথম দুটি লাইন পরিবর্তনের চেষ্টা করুনimport matplotlib.pyplot as plt; cmap = plt.cm.get_cmap('Spectral')
অজ্ঞাতনামা

9

ফ্লোট মানের পরিবর্তে rgba পূর্ণসংখ্যা মান পেতে, আমরা এটি করতে পারি

rgba = cmap(0.5,bytes=True)

সুতরাং Ffisegydd এর উত্তরের ভিত্তিতে কোডটি সরল করতে কোডটি এরকম হবে:

#import colormap
from matplotlib import cm

#normalize item number values to colormap
norm = matplotlib.colors.Normalize(vmin=0, vmax=1000)

#colormap possible values = viridis, jet, spectral
rgba_color = cm.jet(norm(400),bytes=True) 

#400 is one of value between 0 and 1000

0

Ffisegydd এবং amaliammr এর সমাধানগুলি তৈরি করতে , এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে আমরা কাস্টম রঙিনম্যাপের জন্য সিএসভি প্রতিনিধিত্ব করি:

#! /usr/bin/env python3
import matplotlib
import numpy as np 

vmin = 0.1
vmax = 1000

norm = matplotlib.colors.Normalize(np.log10(vmin), np.log10(vmax))
lognum = norm(np.log10([.5, 2., 10, 40, 150,1000]))

cdict = {
    'red':
    (
        (0., 0, 0),
        (lognum[0], 0, 0),
        (lognum[1], 0, 0),
        (lognum[2], 1, 1),
        (lognum[3], 0.8, 0.8),
        (lognum[4], .7, .7),
    (lognum[5], .7, .7)
    ),
    'green':
    (
        (0., .6, .6),
        (lognum[0], 0.8, 0.8),
        (lognum[1], 1, 1),
        (lognum[2], 1, 1),
        (lognum[3], 0, 0),
        (lognum[4], 0, 0),
    (lognum[5], 0, 0)
    ),
    'blue':
    (
        (0., 0, 0),
        (lognum[0], 0, 0),
        (lognum[1], 0, 0),
        (lognum[2], 0, 0),
        (lognum[3], 0, 0),
        (lognum[4], 0, 0),
    (lognum[5], 1, 1)
    )
}


mycmap = matplotlib.colors.LinearSegmentedColormap('my_colormap', cdict, 256)   
norm = matplotlib.colors.LogNorm(vmin, vmax)
colors = {}
count = 0
step_size = 0.001
for value in np.arange(vmin, vmax+step_size, step_size):
    count += 1
    print("%d/%d %f%%" % (count, vmax*(1./step_size), 100.*count/(vmax*(1./step_size))))
    rgba = mycmap(norm(value), bytes=True)
    color = (rgba[0], rgba[1], rgba[2])
    if color not in colors.values():
        colors[value] = color

print ("value, red, green, blue")
for value in sorted(colors.keys()):
    rgb = colors[value]
    print("%s, %s, %s, %s" % (value, rgb[0], rgb[1], rgb[2]))

0

সম্পূর্ণতার জন্য এগুলি এখন পর্যন্ত আমার মুখোমুখি হওয়া সিএম্যাপ পছন্দগুলি:

অ্যাকসেন্ট, অ্যাকসেন্ট_আর, ব্লুজ, ব্লুজ_আর, বিআরবিজি, বিআরবিজি_আর, বুগন, বুগন_আর, বুপু, বুপু_আর, সিএমআরম্যাপ, সিএমআরম্যাপ_আর, ডার্ক 2, ডার্ক 2_আর, জিএনবু, জিএনবিউ_আর, গ্রিনস, আরঞ্জ, আরজি, আরস, ওরিজ, ওরিজ পিআরজিএন_আর, পেয়ার্ড, পেয়ার্ড_আর, প্যাস্টেল 1, পেস্টেল 1_আর, প্যাস্টেল 2, প্যাস্টেল 2_আর, পিওয়াইজি, পিওয়াইজি_আর, পুবু, পিওআর, পুওআর_আর, পিআরডি, আরআরডি_আরপি, আরডিজি, আরপি, আরপি, আরপি, আরপি, আরপি, আরপি, আরডিবি, পিআরডিবি, পিআরডিআর, পিআরডিআর, পিআরডিআর, পিআরডিআর, পিআরডিআর, পিআরডিআরপি, আরডিবি আরডিওয়াইলবু, আরডিওয়ালবিউ_আর, আরডিওয়ালজিএন, আরডিওয়ালজিএন_আর, রেডস, রেডস_আর, সেট 1, সেট 1_আর, সেট 2, সেট 2_আর, সেট 3, সেট 3_আর, স্পেকট্রাল_আর, উইস্টিয়া, উইসটিয়া_আর, জিআর, আর, জিআর, ও, এল, ও, ও, এল, ও, ও, এল, ও, ও, ল, ও, এল, ও, ও, এল, ও, ও, এল, ও, ও, এল, আর, এল আফমোট_আর, শরত্কাল, শরত্কাল_আর, বাইনারি, বাইনারি_আর, হাড়, অস্থি_আর, বিআরজি, বিআরজি_আর, বিডাব্লু, বিডাব্লিউআর, সিভিডিস, সিভিডিস_আর, শীতল, শীতল_আর, কুলওয়ার্ম, কুলওয়ার_আর, তামা, আর, কিউবেলিক্স, গিরি_আর, পতাকা, বার, পতাকাgist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnupr_, gnupn_, gnupn2, gnupn2, gnupn_ জেট_আর, ম্যাগমা, ম্যাগমা_আর, নিপি_স্পেক্টরাল, নিপি_স্পেক্টাল_আর, মহাসাগর, মহাসাগর_আর, গোলাপী, গোলাপী_আর, প্লাজমা, প্লাজমা_আর, প্রিজম, প্রিজম_আর, রংধনু, রংধনু, ভূমিকম্প, সিজমিক_আর, বসন্ত, বসন্ত_আর, গ্রীষ্ম_আর, ট্যাব ২০, ট্যাব ২০ tab20b, tab20b_r, tab20c, tab20c_r, টেরেন, টেরেন_আর, গোধূলি, গোধূলি_আর, গোধূলি_চিকিত্সা, গোধূলি_শিশত_r, ভাইরিডিস, ভাইরিড_আর, শীতকালীন, শীতের_আরধূসর_আর, গরম, গরম_আর, এইচএসভি, এইচএসভি_আর, নরক, আগ্নেয়_আর, জেট, জেট_আর, ম্যাগমা, ম্যাগমা_আর, নিপি_স্পেক্টরাল, নিপি_স্পেক্টাল_আর, সমুদ্র, সমুদ্র_আর, গোলাপী, গোলাপী_আর, প্লাজমা, প্লাজমা_আর, পোড়ামন, বৃষ্টিবিজ্ঞান বসন্ত, বসন্ত_আর, গ্রীষ্ম, গ্রীষ্ম_আর, ট্যাব 10, ট্যাব 10_ আর, ট্যাব 20, ট্যাব 20_আর, ট্যাব 20 বি, ট্যাব 20 বি_আর, টোবল 20 সি, ট্যাব 20 সি_আর, টেরিন, টেরিন_আর, গোধূলি, গোধূলি_আর, গোধূলি_শফিট, গোধূলি_শীফত_আর, ভাইরাস, ভাইরাল_আরধূসর_আর, গরম, গরম_আর, এইচএসভি, এইচএসভি_আর, নরক, আগ্নেয়_আর, জেট, জেট_আর, ম্যাগমা, ম্যাগমা_আর, নিপি_স্পেক্টরাল, নিপি_স্পেক্টাল_আর, সমুদ্র, সমুদ্র_আর, গোলাপী, গোলাপী_আর, প্লাজমা, প্লাজম_আর, পোড়ামন, রংধনু, বৃষ্টিবিজ্ঞান বসন্ত, বসন্ত_আর, গ্রীষ্ম, গ্রীষ্ম_আর, ট্যাব 10, ট্যাব 10_ আর, ট্যাব 20, ট্যাব 20_আর, ট্যাব 20 বি, ট্যাব 20 বি_আর, টোবল 20 সি, ট্যাব 20 সি_আর, টেরিন, টেরিন_আর, গোধূলি, গোধূলি_আর, গোধূলি_শফিট, গোধূলি_শীফত_আর, ভাইরাস, ভাইরাল_আরভাইরিডিস, ভাইরিডিস_আর, শীতকাল, শীতকালীন_আরভাইরিডিস, ভাইরিডিস_আর, শীতকাল, শীতকালীন_আর

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