ম্যাটপ্ল্লোলিবের একটি চিত্রের মধ্যে প্রতিটি প্লট করা লাইনের জন্য কীভাবে একটি নতুন রঙ চয়ন করবেন?


109

আমি প্রতিটি প্লট করা লাইনের জন্য একটি রঙ নির্দিষ্ট করতে চাই না এবং প্রতিটি লাইনের একটি আলাদা রঙ পেতে চাই। তবে আমি যদি চালাতে পারি:

from matplotlib import pyplot as plt
for i in range(20):
    plt.plot([0, 1], [i, i])

plt.show()

তাহলে আমি এই আউটপুট পেতে:

উপরের কোড দ্বারা গ্রাফ আউটপুট চিত্র

আপনি যদি উপরে চিত্রটি দেখেন, আপনি দেখতে পাচ্ছেন যে ম্যাটপ্ল্লোলিব প্রতিটি লাইনের জন্য আলাদা আলাদা রঙ বেছে নেওয়ার চেষ্টা করে তবে শেষ পর্যন্ত এটি আবার রঙ ব্যবহার করে - শীর্ষ দশটি লাইন নীচের দশের মতো একই রঙ ব্যবহার করে use আমি কেবল ইতিমধ্যে ব্যবহৃত রঙগুলি পুনরাবৃত্তি করতে বাধা দিতে চাই এবং / বা এটি ব্যবহারের জন্য রঙের একটি তালিকা ফিড করি।

উত্তর:


59

matplotlib 1.5+

আপনি axes.set_prop_cycle( উদাহরণ ) ব্যবহার করতে পারেন ।

matplotlib 1.0-1.4

আপনি axes.set_color_cycle( উদাহরণ ) ব্যবহার করতে পারেন ।

matplotlib 0.x

আপনি ব্যবহার করতে পারেন Axes.set_default_color_cycle


1
আমি যা খুঁজছিলাম তার ধারে আরও ... আপনি কীভাবে এন বর্ণের তালিকা তৈরি করতে কোনও বর্ণমালা ব্যবহার করবেন সে সম্পর্কে তথ্য যুক্ত করতে পারেন?
27 এ ড্ল্যামোট

19
@ অ্যাক্সিল্ড - আমার নিজের উত্তরটি খুব বেশি প্লাগ না করা, তবে এই উত্তরের নীচে একটি উদাহরণ রয়েছে: stackoverflow.com/questions/4805048/… মূলত আপনি কেবল এটি করেন:, [colormap(i) for i in np.linspace(0, 0.9, num_plots)]যেখানে colormapরঙিনম্যাপগুলির মধ্যে একটি matplotlib.pyplot.cmএবং এটির numplotsসংখ্যাটি আপনি চান যে অনন্য রঙের। সতর্ক থাকুন যে এর ফলে এমন রঙের ফলাফল হতে পারে যা একে অপরের থেকে পৃথক করা শক্ত, যদিও !!
জো কিংটন

4
জো উত্তর, এবং এটি জাইল্ডের প্রশ্নের উত্তর বলে মনে হচ্ছে, তাই আমি এটি এখানে রেখে দেব। এছাড়াও, যদিও, এটা লক্ষ সেখানে যেমন স্বতন্ত্র রং উৎপাদিত, উপর প্রশ্নের কিছু ভাল উত্তর আছে মূল্য stackoverflow.com/questions/470690/...
tom10

এটি কোনও প্লটের জন্য কাজ করে? আমি অ্যাক্সেস 3 ডি তে সেট_প্রপ_সাইকেল চেষ্টা করেছি, তারপরে আমি ax.plot_wireframe () সহ একাধিক প্লটের জন্য লুপ ব্যবহার করেছি, তবে 2 প্লট একই রঙের সাথে বর্ণযুক্ত।
জুনহো পার্ক

112

আমি সাধারণত এর মধ্যে দ্বিতীয়টি ব্যবহার করি:

from matplotlib.pyplot import cm
import numpy as np

#variable n below should be number of curves to plot

#version 1:

color=cm.rainbow(np.linspace(0,1,n))
for i,c in zip(range(n),color):
   plt.plot(x, y,c=c)

#or version 2:

color=iter(cm.rainbow(np.linspace(0,1,n)))
for i in range(n):
   c=next(color)
   plt.plot(x, y,c=c)

2 উদাহরণ: ইটারের সাথে উদাহরণস্বরূপ প্লট, পরবর্তী রঙ


আমি # 2 ব্যবহার করেছি। আমার চক্রান্ত করার দরকার এমন চ্যানেলের একটি তালিকা আমার কাছে রয়েছে তবে সেগুলি বিভিন্ন দৈর্ঘ্যের হতে পারে। আমি দেখতে পেলাম যে তালিকার এন = লেন সেট করা রংগুলি নির্বাচনের রংগুলি বিস্তৃত হয় এবং আপনি পার্থক্যটি বলতে পারবেন তা নিশ্চিত করার জন্য খুব সহায়ক। যদি এই সংখ্যাটি খুব বেশি হয় তবে রঙের পার্থক্যটি দেখা শক্ত।
mauve

আমি # 1 ব্যবহার করেছি, এটি গণনা করা (তালিকা_নাম)
ডিভএক্স

11

prop_cycle

color_cycleএই সাধারণীকরণ পক্ষে 1.5-এ অসমর্থিত হয়েছে: http://matplotlib.org/users/whats_new.html#added-axes-prop-cycle-key-to-rcparams

# cycler is a separate package extracted from matplotlib.
from cycler import cycler
import matplotlib.pyplot as plt

plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b'])))
plt.plot([1, 2])
plt.plot([2, 3])
plt.plot([3, 4])
plt.plot([4, 5])
plt.plot([5, 6])
plt.show()

(বর্তমানে খারাপ নাম দেওয়া হয়েছে) উদাহরণেও দেখানো হয়েছে: http://matplotlib.org/1.5.1/example/color/color_cirl_demo.html এখানে উল্লিখিত: https://stackoverflow.com/a/4971431/895245

ম্যাটপ্ল্লিটিব ২.০.২.২ এ পরীক্ষিত


9

আপনি স্বয়ংক্রিয়ভাবে রঙটি পরিবর্তন করতে পারবেন কিনা তা আমি জানি না তবে আপনি বিভিন্ন রঙ উত্পন্ন করতে আপনার লুপটি শোষণ করতে পারেন:

for i in range(20):
   ax1.plot(x, y, color = (0, i / 20.0, 0, 1)

এই ক্ষেত্রে, রঙগুলি কালো থেকে 100% সবুজ হয়ে যায়, তবে আপনি চাইলে এটি টিউন করতে পারেন।

দেখুন matplotlib চক্রান্ত () ডক্স এবং জন্য বর্ণন colorশব্দ যুক্তি।

আপনি যদি রঙের একটি তালিকা ফিড করতে চান তবে নিশ্চিত হয়ে নিন যে আপনার যথেষ্ট পরিমাণের একটি তালিকা রয়েছে এবং রংটি নির্বাচন করতে লুপের সূচীটি ব্যবহার করুন

colors = ['r', 'b', ...., 'w']

for i in range(20):
   ax1.plot(x, y, color = colors[i])

1
হ্যাঁ, আমি এই জাতীয় কিছু করা এড়াতে চেয়েছিলাম। আমি রঙিন মানচিত্রগুলিতে সন্ধান করেছি তবে সেগুলি কীভাবে ব্যবহার করব সে সম্পর্কে আমি বেশ বিভ্রান্ত।
ড্লেমোটে


এটি খুব ভাল, বিশেষত যখন সেট_প্রপ_সাইকেল ব্যর্থ হয়। আমি জানি না কেন অ্যাক্সেস 3 ডি-তে প্লট_ওয়্যারফ্রেমে () এ সেট_প্রপ_সাইকেল বা স্বয়ংক্রিয় রঙিন ব্যর্থ হয়। রঙ করার জন্য এটি এক ধরণের বেসিক / ম্যানুয়াল সমাধান।
জুনহো পার্ক

6

আপনি এটির মতো একটি পূর্বনির্ধারিত "গুণগত রঙিন মানচিত্র" ব্যবহার করতে পারেন:

from matplotlib.cm import get_cmap

name = "Accent"
cmap = get_cmap(name)  # type: matplotlib.colors.ListedColormap
colors = cmap.colors  # type: list
axes.set_prop_cycle(color=colors)

Matplotlib 3.0.3 এ পরীক্ষিত। আপনি কেন কল করতে পারবেন না সে সম্পর্কে আলোচনার জন্য https://github.com/matplotlib/matplotlib/issues/10840 দেখুন axes.set_prop_cycle(color=cmap)

পূর্বনির্ধারিত গুণগত রঙিন মানচিত্রগুলির একটি তালিকা https://matplotlib.org/gallery/color/colormap_references.html এ উপলব্ধ :

গুণগত রঙিন মানচিত্রের তালিকা


নোট করুন যে এটির উপর ক্রমে প্রথম 3 টি রঙ নেয়
বেন জোন্স

2

আপনি নিজের matplotlibrcফাইলে ডিফল্ট রঙ চক্রও পরিবর্তন করতে পারেন । আপনি যদি সেই ফাইলটি জানেন না, তবে অজগরটিতে নিম্নলিখিতটি করুন:

import matplotlib
matplotlib.matplotlib_fname()

এটি আপনাকে আপনার বর্তমানে ব্যবহৃত ম্যাটপ্ল্লিটলিব্রিসি ফাইলের পথ প্রদর্শন করবে। সেই ফাইলটিতে আপনি দেখতে পাবেন এমন অনেকগুলি সেটিংসের মধ্যে একটি axes.color.cycle। রঙের জন্য আপনার পছন্দসই সিকোয়েন্সটি রেখে দিন এবং এটি আপনার তৈরি প্রতিটি প্লটেই পাবেন। নোট করুন যে আপনি ম্যাটপ্ল্লোলিবতে সমস্ত বৈধ এইচটিএমএল রঙের নামও ব্যবহার করতে পারেন।


0

সিিরোর উত্তর নোট হিসাবে আপনি prop_cycleম্যাটপ্ল্লোলিবের জন্য চক্রের জন্য রঙের একটি তালিকা সেট করতে ব্যবহার করতে পারেন । তবে কত রঙ? আপনি যদি বিভিন্ন সংখ্যক লাইনের সাথে প্রচুর প্লটের একই রঙের চক্রটি ব্যবহার করতে চান তবে কী হবে?

একটি কৌশলটি হ'ল https://gamedev.stackexchange.com/a/46469/22397 এর মতো সূত্র ব্যবহার করা , যেখানে রঙগুলির পূর্ববর্তী সমস্তগুলি থেকে প্রতিটি বর্ণ উল্লেখযোগ্যভাবে আলাদা হওয়ার চেষ্টা করে এমন বর্ণের অসীম অনুক্রম তৈরি করতে।

দুর্ভাগ্যক্রমে, prop_cycleঅসীম ক্রমগুলি গ্রহণ করবে না - আপনি এটি পাস করলে এটি চিরতরে স্তব্ধ হয়ে যাবে। তবে আমরা বলতে পারি, এই জাতীয় ক্রম থেকে প্রথম 1000 টি রঙ তৈরি হয়েছিল এবং এটি রঙচক্র হিসাবে সেট করতে পারে। এইভাবে, কোনও বুদ্ধিমান সংখ্যক লাইনের প্লটগুলির জন্য, আপনার আলাদা আলাদা রঙগুলি পাওয়া উচিত।

উদাহরণ:

from matplotlib import pyplot as plt
from matplotlib.colors import hsv_to_rgb
from cycler import cycler

# 1000 distinct colors:
colors = [hsv_to_rgb([(i * 0.618033988749895) % 1.0, 1, 1])
          for i in range(1000)]
plt.rc('axes', prop_cycle=(cycler('color', colors)))

for i in range(20):
    plt.plot([1, 0], [i, i])

plt.show()

আউটপুট:

উপরের কোড দ্বারা গ্রাফ আউটপুট

এখন, সমস্ত রঙ আলাদা - যদিও আমি স্বীকার করি যে আমি তাদের কয়েকটিকে আলাদা করার জন্য লড়াই করছি!

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