কীভাবে একটি পান্ডা / ম্যাটপ্ল্লিটিব বার গ্রাফ কাস্টম রঙ দেয়


86

আমি সবেমাত্র বার চার্ট উত্পন্ন করার জন্য এক্সেলের প্রতিস্থাপন হিসাবে পান্ডাস / ম্যাটপ্ল্লোটিব ব্যবহার শুরু করেছি। আমি একটি ইস্যু মধ্যে চালাচ্ছি

(1) ডিফল্ট রঙিন্যাপে কেবল 5 টি রঙ রয়েছে, তাই আমার যদি 5 টিরও বেশি বিভাগ থাকে তবে রঙগুলি পুনরাবৃত্তি করে। আমি কীভাবে আরও রং নির্দিষ্ট করতে পারি? আদর্শভাবে, একটি প্রারম্ভিক রঙ এবং একটি শেষ রঙের সাথে একটি গ্রেডিয়েন্ট এবং এর মধ্যে n রঙগুলি গতিময়ভাবে উত্পন্ন করার উপায়?

(২) রঙগুলি খুব চাক্ষুষভাবে আকর্ষণীয় নয়। আমি কীভাবে এন রঙের একটি কাস্টম সেট নির্দিষ্ট করব? অথবা, গ্রেডিয়েন্টও কাজ করবে।

উপরোক্ত দুটি বিষয়কেই চিত্রিত করে এমন উদাহরণ নীচে:

  4 from matplotlib import pyplot
  5 from pandas import *
  6 import random
  7 
  8 x = [{i:random.randint(1,5)} for i in range(10)]
  9 df = DataFrame(x)
 10 
 11 df.plot(kind='bar', stacked=True)

এবং আউটপুটটি হ'ল:

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


আংশিক রঙিন মানচিত্রটি পাওয়ার খুব সহজ উপায় রয়েছে। নীচের এই সমাধানটি দেখুন
টেড পেট্রো

উত্তর:


120

আপনি colorসরাসরি plotফাংশনটির তালিকা হিসাবে বিকল্পটি নির্দিষ্ট করতে পারেন ।

from matplotlib import pyplot as plt
from itertools import cycle, islice
import pandas, numpy as np  # I find np.random.randint to be better

# Make the data
x = [{i:np.random.randint(1,5)} for i in range(10)]
df = pandas.DataFrame(x)

# Make a list by cycling through the colors you care about
# to match the length of your data.
my_colors = list(islice(cycle(['b', 'r', 'g', 'y', 'k']), None, len(df)))

# Specify this list of colors as the `color` option to `plot`.
df.plot(kind='bar', stacked=True, color=my_colors)

আপনার নিজস্ব কাস্টম তালিকার সংজ্ঞা দিতে, আপনি নীচের কয়েকটি করতে পারেন, বা কেবল রঙিন আইটেমকে তার আরজিবি মানগুলি দ্বারা সংজ্ঞায়িত করার জন্য ম্যাটপ্ল্লিটিব কৌশলগুলি সন্ধান করতে পারেন this

my_colors = ['g', 'b']*5 # <-- this concatenates the list to itself 5 times.
my_colors = [(0.5,0.4,0.5), (0.75, 0.75, 0.25)]*5 # <-- make two custom RGBs and repeat/alternate them over all the bar elements.
my_colors = [(x/10.0, x/20.0, 0.75) for x in range(len(df))] # <-- Quick gradient example along the Red/Green dimensions.

সর্বশেষ উদাহরণটি আমার জন্য রঙের অনুসরণের সহজ গ্রেডিয়েন্ট দেয়:

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

কীভাবে কিংবদন্তিটিকে সংজ্ঞায়িত রং তুলতে বাধ্য করা যায় তা নির্ধারণ করার জন্য আমি এটির সাথে এতক্ষণ খেলিনি, তবে আমি নিশ্চিত যে আপনি এটি করতে পারবেন।

সাধারণভাবে, যদিও, পরামর্শের একটি বড় অংশটি হ'ল ম্যাটপ্ল্লোলিবের সরাসরি কাজগুলি সরাসরি ব্যবহার করা। পান্ডাস থেকে তাদের কল করা ঠিক আছে, তবে আমি আপনাকে ম্যাটপ্ল্লোলিব থেকে সরাসরি কল করার জন্য আরও ভাল বিকল্প এবং পারফরম্যান্স পেয়েছি বলে মনে করি।


4
ছোট বাগ: আমার_রঙগুলি = [চক্র (['বি', 'আর', 'জি', 'ই', 'কে'])। পরবর্তী () আই ইন ইন রেঞ্জের জন্য (লেন (ডিএফ))] 'বি' দেবে অজগর প্রতিবার 2.7। পরিবর্তে আপনার তালিকাগুলি (আইলিস (চক্র (['বি', 'আর', 'জি', 'ওয়াই', 'কে'])) নয়, লেন (ডিএফ)) ব্যবহার করা উচিত।
vkontori

ধন্যবাদ, আমি সম্ভবত এটি ধরা হত না। আরেকটি বিকল্প হ'ল প্রথমে চক্র তৈরি করা, তারপরে কেবল তার nextকার্যকারিতাটি বোঝার ভিতরে কল করুন ।
ely

হা. এটি = চক্র (['b', 'r', 'g', 'y', 'কে']); my_colors = [পরবর্তী (এটি) আমি ইনরেঞ্জে (লেন (ডিএফ))] এটিও কেটে
ফেলত

4
পান্ডা এবং ম্যাটপ্ল্লিটিব আজ ইনস্টল করা থাকলে উপরের কোডটি আমার জন্য কিছুই তৈরি করে না, যদিও এটি চলে।
কাকিয়ো

@ কাকিয়ো আপনি কি নিয়মিত দোভাষী, আইপিথন, বা শেল (বা অন্য কোনও কিছু) থেকে চালাচ্ছেন? আপনি এই pylab.ion()কোডটির মধ্যে কোন প্রকারের পরিবেশটি চালাচ্ছেন তার উপর নির্ভর করে আপনার ম্যাটপ্ল্লোলিবের জন্য ইন্টারেক্টিভ মোডটি চালু করতে বা ইন্টারেক্টিভ পাইব্লাবের জন্য সেট করতে হতে পারে ।
ely

54

আমি খুঁজে পেলাম সবচেয়ে সহজ উপায় হ'ল পূর্ব নির্ধারিত রঙের গ্রেডিয়েন্টগুলির সাথে colormapপরামিতিটি ব্যবহার করা .plot():

df.plot(kind='bar', stacked=True, colormap='Paired')

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

আপনি এখানে প্রিসেট কালারম্যাপগুলির একটি বৃহত তালিকা পেতে পারেন ।

colormaps


19
আমার ক্ষেত্রে এই শুধুমাত্র সমস্ত বার জুড়ে এক রঙের উৎপাদ
tsando

আমি এই রঙিন মানচিত্রগুলির তালিকাটি দরকারী matplotlib.org/example/color/colormaps_references.html gallantlab.github.io/colormaps.html
আল পো

15

আপনার নিজের রঙিনম্যাপগুলি তৈরি করার বিষয়ে আরও বিস্তৃত উত্তরের জন্য, আমি এই পৃষ্ঠায় দেখার পরামর্শ দিচ্ছি

যদি সেই উত্তরটি খুব বেশি কাজ করে, আপনি দ্রুত নিজের রঙের নিজস্ব তালিকা তৈরি করতে পারেন এবং সেগুলি colorপ্যারামিটারে দিতে পারেন। সমস্ত cmরঙিনম্যাপগুলি ম্যাটপ্লোটিলিব মডিউলে। বিপরীত নরকটি রঙিনম্যাপ থেকে 30 আরজিবি (প্লাস আলফা) রঙের মানগুলির একটি তালিকা আসুন। এটা করার জন্য, প্রথম colormap পেতে এবং তারপর এটি 0 এবং 1 এর মধ্যে মূল্যবোধের একটা ক্রম পাস এখানে, আমরা ব্যবহার np.linspace.4 এবং .8 যে colormap যে অংশ প্রতিনিধিত্ব মধ্যে 30 সমানভাবে-ব্যবধানযুক্ত মান তৈরি করুন।

from matplotlib import cm
color = cm.inferno_r(np.linspace(.4, .8, 30))
color

array([[ 0.865006,  0.316822,  0.226055,  1.      ],
       [ 0.851384,  0.30226 ,  0.239636,  1.      ],
       [ 0.832299,  0.283913,  0.257383,  1.      ],
       [ 0.817341,  0.270954,  0.27039 ,  1.      ],
       [ 0.796607,  0.254728,  0.287264,  1.      ],
       [ 0.775059,  0.239667,  0.303526,  1.      ],
       [ 0.758422,  0.229097,  0.315266,  1.      ],
       [ 0.735683,  0.215906,  0.330245,  1.      ],
       .....

তারপরে আমরা এটি মূল পোস্ট থেকে ডেটা ব্যবহার করে প্লট করতে ব্যবহার করতে পারি:

import random
x = [{i: random.randint(1, 5)} for i in range(30)]
df = pd.DataFrame(x)
df.plot(kind='bar', stacked=True, color=color, legend=False, figsize=(12, 4))

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


4
এখানে অন্যান্য রঙ ডকুমেন্টেশন মানচিত্র পৃথক্ থেকে inferno_r: matplotlib.org/examples/color/colormaps_reference.html
tsando

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