ম্যাটপ্ল্লিটিবের একটি লাইনে পৃথক পয়েন্টের জন্য চিহ্নিতকারী সেট করুন


174

আমি একটি চিত্রের লাইনে প্লট করতে ম্যাটপ্লটলিব ব্যবহার করেছি। এখন আমি লাইনে পৃথক পয়েন্টগুলির জন্য শৈলীটি বিশেষত চিহ্নিতকারীকে সেট করতে চাই। আমি এটা কিভাবে করবো?

আমার প্রশ্নটি পরিষ্কার করার জন্য, আমি পৃথক চিহ্নিতকারীদের জন্য একটি লাইনে স্টাইলটি সেট করতে সক্ষম হতে চাই, প্রতিটি মার্কার বলেন রেখায় নয়।


2
: Arclength মার্কার ব্যবধান এর জন্য সম্পর্কিত সমাধান stackoverflow.com/questions/17406758/...
Ioannis Filippidis

উত্তর:


324

কীওয়ার্ড আরগস linestyleএবং / অথবা markerআপনার কলটিতে নির্দিষ্ট করুন plot

উদাহরণস্বরূপ, একটি ড্যাশযুক্ত লাইন এবং নীল বৃত্ত চিহ্নিতকারী ব্যবহার করে:

plt.plot(range(10), linestyle='--', marker='o', color='b')

একই জিনিসটির জন্য একটি শর্টকাট কল:

plt.plot(range(10), '--bo')

example1

এখানে সম্ভাব্য লাইন এবং মার্কার শৈলীর একটি তালিকা রয়েছে:

================    ===============================
character           description
================    ===============================
   -                solid line style
   --               dashed line style
   -.               dash-dot line style
   :                dotted line style
   .                point marker
   ,                pixel marker
   o                circle marker
   v                triangle_down marker
   ^                triangle_up marker
   <                triangle_left marker
   >                triangle_right marker
   1                tri_down marker
   2                tri_up marker
   3                tri_left marker
   4                tri_right marker
   s                square marker
   p                pentagon marker
   *                star marker
   h                hexagon1 marker
   H                hexagon2 marker
   +                plus marker
   x                x marker
   D                diamond marker
   d                thin_diamond marker
   |                vline marker
   _                hline marker
================    ===============================

সম্পাদনা করুন: মন্তব্যে অনুরোধ অনুসারে পয়েন্টগুলির একটি স্বেচ্ছাসেবক উপসেট চিহ্নিত করার উদাহরণ সহ:

import numpy as np
import matplotlib.pyplot as plt

xs = np.linspace(-np.pi, np.pi, 30)
ys = np.sin(xs)
markers_on = [12, 17, 18, 19]
plt.plot(xs, ys, '-gD', markevery=markers_on)
plt.show()

example2

এই বৈশিষ্ট্যটি শাখারmarkevery মার্জ হওয়ার কারণে কাওয়ার্গ ব্যবহারের এই শেষ উদাহরণটি 1.4+ থেকে সম্ভব । আপনি যদি ম্যাটপ্ল্লোলিবের কোনও পুরানো সংস্করণে আটকে থাকেন তবে লাইন প্লটটিতে একটি স্ক্যাটারপ্ল্লটকে আচ্ছাদন করে আপনি ফলাফলটি অর্জন করতে পারেন। দেখুন সম্পাদনা ইতিহাস আরো বিস্তারিত জানার জন্য।


2
আমি সেই অংশটি জানি। আমি যা করতে চাই তা কেবলমাত্র নির্দিষ্ট পয়েন্টগুলি চিহ্নিত করে। আপনার উদাহরণ দেওয়া যায়, আমি উদাহরণস্বরূপ কীভাবে কেবল ২ য় এবং ৩ য় পয়েন্টে চিহ্নিত করব? দুঃখিত, যদি আমার প্রশ্নটি এই দিকটিতে যথেষ্ট পরিস্কার না হয়।
dbmikus

4
আপনি একবার '-' শৈলীর সাথে প্লট কল করতে পারেন এবং তারপরে আপনি পয়েন্টের উপসেটে 'ও' শৈলীতে আবার প্লট কল করতে পারেন।
wim

আমি কী প্লটগুলিতে সরবরাহ করা মানগুলি নিয়ে পুনরাবৃত্তি করব এবং মার্কারগুলির সাথে কেবল একটি সংযোগ বিচ্ছিন্ন বিন্দু সাবপ্লট তৈরি করব? এবং তারপরে সেগুলি পূর্ববর্তী লাইনের শীর্ষে স্থাপন করা হবে? বা এটি করার একটি পরিষ্কার উপায় আছে? আমি সেভাবে এটি ভাল করছি তবে আমি এটি সবচেয়ে গ্রহণযোগ্য উপায়ে কোড করতে চাই।
dbmikus

1
না, একটি লুপ ব্যবহার করবেন না, এটি ক্যানভাসে অনেক বেশি শিল্পী হবে যা সত্যই ধীর হতে পারে। আসল ইনপুটটির একটি স্লাইস ব্যবহার করুন।
wim

@ অ্যাবিডআরহমানকে আপনি সমস্ত উপলভ্য চিহ্নিতকারীও এর মাধ্যমে দেখতে পারেন matplotlib.markers.MarkerStyle.markers, যা উপরে বর্ণিত উইমের মতো একটি অভিধান প্রদান করে।
joelostblom

54

এখানে একটি চিত্র রয়েছে যা সমস্ত চিহ্নিতকারীদের নাম এবং বিবরণ দেখায়, আমি আশা করি এটি আপনাকে সহায়তা করবে।

import matplotlib.pylab as plt
markers=['.',',','o','v','^','<','>','1','2','3','4','8','s','p','P','*','h','H','+','x','X','D','d','|','_']
descriptions=['point', 'pixel', 'circle', 'triangle_down', 'triangle_up','triangle_left', 'triangle_right', 'tri_down', 'tri_up', 'tri_left','tri_right', 'octagon', 'square', 'pentagon', 'plus (filled)','star', 'hexagon1', 'hexagon2', 'plus', 'x', 'x (filled)','diamond', 'thin_diamond', 'vline', 'hline']
x=[]
y=[]
for i in range(5):
    for j in range(5):
        x.append(i)
        y.append(j)
plt.figure()
for i,j,m,l in zip(x,y,markers,descriptions):
    plt.scatter(i,j,marker=m)
    plt.text(i-0.15,j+0.15,s=m+' : '+l)
plt.axis([-0.1,4.8,-0.1,4.5])
plt.tight_layout()
plt.axis('off')
plt.show()  

example1


14

ভবিষ্যতের রেফারেন্সের জন্য - Line2Dশিল্পীর কাছে ফিরে আসার plot()একটি set_markevery()পদ্ধতিও রয়েছে যা আপনাকে কেবল নির্দিষ্ট পয়েন্টগুলিতে চিহ্নিতকারী সেট করতে দেয় - https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D দেখুন। set_markevery


2
সত্য, তবে নির্বিচারে বিন্দুগুলিতে নয় - এটি শুরু করতে হবে: বন্ধ করুন: ধাপের ধরণের সাবটাইট আমি মনে করি ..
উইম

আমার ধারণাটি এই যে উপরের দুটি পোস্টই প্রশ্নের উত্তর দেয়। কারণটি হ'ল তারা দুটি ভিন্ন ইস্যু সম্বোধন করে। শব্দ "চিহ্নিতকারী" সাধারণত একটি বক্ররেখা শৈলী বোঝায়। সুতরাং একটি নিয়মিত নিয়ম (যেমন প্রতি 10) অন্তর্ভুক্ত থাকে। আপনি যদি পয়েন্টগুলির কিছু "স্বেচ্ছাসেবক" উপসেট একসাথে করতে চান, তবে দয়া করে এটিকে একটি পৃথক বক্ররেখা হিসাবে বিবেচনা করুন, মূল বক্ররেখার হিসাবে চিহ্নিত করবেন না। এটি ঠিক একটি আলাদা বক্ররেখা যা চিহ্নিতকারীদের সাথে ঘটে। সুতরাং আপনাকে পয়েন্টগুলি ম্যানুয়ালি নির্বাচন করতে হবে বলে আশা করা হচ্ছে। এই বিষয়টি আকর্ষণীয় এবং আরও গভীরতর হয়, প্রাসঙ্গিক কোড প্রকাশের পরে, ভবিষ্যতের পোস্টে আরও মন্তব্য করবে।
আইওনিস ফিলিপিসিস

1
@ উইম একটি জনসংযোগ রয়েছে যা আশা করি এটি এটিকে ১.৪ করে দেবে যা আপনাকে স্বেচ্ছাচারী পয়েন্টগুলি চিহ্নিত করতে দেবে github.com/matplotlib/matplotlib/pull/2662
টাকাসওয়েল

1

একটি নির্দিষ্ট পয়েন্ট চিহ্নিতকারী আকার, আকার ... পরিবর্তন করার একটি সহজ কৌশলটি হ'ল প্রথমে এটি অন্য সমস্ত ডেটা দিয়ে প্লট করা হয় তবে কেবলমাত্র সেই বিন্দু দিয়ে আরও একটি প্লট প্লট করা হয় (বা আপনি যদি একাধিক পয়েন্টের স্টাইল পরিবর্তন করতে চান তবে পয়েন্টের সেট) । মনে করুন আমরা দ্বিতীয় পয়েন্টের চিহ্নিতকরণের আকারটি পরিবর্তন করতে চাই:

x = [1,2,3,4,5]
y = [2,1,3,6,7]

plt.plot(x, y, "-o")
x0 = [2]
y0 = [1]
plt.plot(x0, y0, "s")

plt.show()

ফলাফলটি হ'ল: একাধিক মার্কার সহ প্লট

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