পাইপ্লট দিয়ে একটি বৃত্ত তৈরি করুন


158

আশ্চর্যজনকভাবে আমি কীভাবে ইনপুট সেন্টার (এক্স, ওয়াই) এবং ব্যাসার্ধ হিসাবে গ্রহণ করে ম্যাটপ্ল্লোব.পাইপ্লট (দয়া করে কোনও পাইলব) দিয়ে একটি বৃত্ত আঁকতে হবে তার কোনও সরাসরি-ফরোয়ার্ড বর্ণনা পাইনি। আমি এর কয়েকটি রূপ চেষ্টা করেছি:

import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()

... কিন্তু এখনও এটি কাজ করে না।


আমি নিশ্চিত যে এটি করা সম্ভব, তবে ম্যাটপ্ল্লিটিব মূলত চক্রান্ত করা (যেমন এখানে কিছু ডেটা রয়েছে, এগুলি কোনও গ্রাফের উপরে রাখুন) আঁকানো নয়, তাই এটি সম্পূর্ণ সোজা নাও হতে পারে।
থমাস কে

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

1
plt.scatter () একটি আকারের আর্গুমেন্ট নেয়। আপনি চেনাশোনাগুলির রেডিয়ি এবং চেনাশোনাগুলির বর্ণগুলির x- এবং y- স্থানাঙ্কের জন্য তালিকাগুলি পাস করতে পারেন। matplotlib.org/1.3.1/api/… । এর আগে আমার ত্রুটিটি ভেবে যে এই জাতীয় কার্যকারিতাটি ইতিমধ্যে ম্যাটপ্লোটিলেবে ছিল না।
বেনেট ব্রাউন

3
কেবল উল্লেখ করার জন্য: plt.Circle(..)নির্দেশ দেয় matplotlib.patches.Circle()। সুতরাং পাইপ্লট ছাড়া সমাধান হবে circle = matplotlib.patches.Circle(..); axes.add_artist(circle)
ImportanceOfBeingErnest

উত্তর:


203

আপনার এটি একটি অক্ষতে যুক্ত করা দরকার। এ Circleহ'ল একটি সাবক্লাস Artist, এবং একটিতে axesএকটি add_artistপদ্ধতি রয়েছে।

এটি করার উদাহরণ এখানে:

import matplotlib.pyplot as plt

circle1 = plt.Circle((0, 0), 0.2, color='r')
circle2 = plt.Circle((0.5, 0.5), 0.2, color='blue')
circle3 = plt.Circle((1, 1), 0.2, color='g', clip_on=False)

fig, ax = plt.subplots() # note we must use plt.subplots, not plt.subplot
# (or if you have an existing figure)
# fig = plt.gcf()
# ax = fig.gca()

ax.add_artist(circle1)
ax.add_artist(circle2)
ax.add_artist(circle3)

fig.savefig('plotcircles.png')

নিম্নলিখিত চিত্রটিতে এটি ফলাফল:

প্রথম চেনাশোনাটি মূলত, তবে ডিফল্টরূপে clip_onহয় True, তাই যখন চেনাশোনা ছাড়িয়ে প্রসারিত হয় তখন বৃত্তটি ক্লিপ করা হয় axes। তৃতীয় (সবুজ) চেনাশোনাটি আপনি যখন ক্লিপ করবেন না তখন কী ঘটে তা দেখায় Artist। এটি অক্ষের বাইরেও প্রসারিত হয় (তবে চিত্রের বাইরে নয়, অর্থাত্ চিত্রের আকারটি আপনার সমস্ত শিল্পীর প্লট করার জন্য স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয় না )।

X, y এবং ব্যাসার্ধের জন্য ইউনিটগুলি ডিফল্টরূপে ডেটা ইউনিটের সাথে মিল রাখে। এই ক্ষেত্রে, আমি আমার অক্ষগুলিতে কোনও কিছুর প্লট করিনি ( fig.gca()বর্তমান অক্ষগুলি ফেরৎ দেয়) এবং যেহেতু সীমা কখনই নির্ধারণ করা হয়নি, সেগুলি ডিফল্ট x এবং y এর মধ্যে 0 থেকে 1 অবধি থাকে।

ইউনিট কীভাবে গুরুত্বপূর্ণ তা দেখিয়ে এখানে উদাহরণের একটি ধারাবাহিকতা রয়েছে:

circle1 = plt.Circle((0, 0), 2, color='r')
# now make a circle with no fill, which is good for hi-lighting key results
circle2 = plt.Circle((5, 5), 0.5, color='b', fill=False)
circle3 = plt.Circle((10, 10), 2, color='g', clip_on=False)

ax = plt.gca()
ax.cla() # clear things for fresh plot

# change default range so that new circles will work
ax.set_xlim((0, 10))
ax.set_ylim((0, 10))
# some data
ax.plot(range(11), 'o', color='black')
# key data point that we are encircling
ax.plot((5), (5), 'o', color='y')

ax.add_artist(circle1)
ax.add_artist(circle2)
ax.add_artist(circle3)
fig.savefig('plotcircles2.png')

যার ফলাফল:

আমি দেখতে পাচ্ছি যে আমি কীভাবে দ্বিতীয় চেনাশোনাটি পূরণ করব False, যা মূল ফলাফলগুলি ঘিরে দেওয়ার জন্য কার্যকর (আমার হলুদ ডেটা পয়েন্টের মতো)।


4
আমি এই উত্তরটি পছন্দ করি কারণ আপনি চক্রান্ত করার পরিবর্তে একটি বৃত্ত "অঙ্কন" করছেন। যদিও চক্রান্ত করা আমার প্রথম প্রবৃত্তি হত been
samb8s

7
এফওয়াইআই: দেখে মনে হচ্ছে সার্কেল ক্লাসটি এই উত্তরটি লেখার পর থেকেই ম্যাটপ্ল্লোলিব.পায়প্লট থেকে ম্যাটপ্ল্লোব.প্যাচসে চলে গেছে।
প্যাভন

6
তবে তবে বৃত্তগুলি ডিম্বাকৃতি!
রুবেনভবি

1
@ আরুবেনভ আমার অন্য উত্তর দেখুন: স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / ৯২৩০৩৮৯/২
ইয়ান

3
@ প্যাভন আমার জন্য matplotlib.pyplot.Circle == matplotlib.patches.Circleমূল্যায়ন করে True, তাই তারা সম্ভবত এলিয়াস হয়।
এভেজেনি সার্জিভ

66
import matplotlib.pyplot as plt
circle1=plt.Circle((0,0),.2,color='r')
plt.gcf().gca().add_artist(circle1)

একটি বিদ্যমান প্লটে দ্রুত একটি বৃত্ত প্লাগ করতে, গৃহীত উত্তরের একটি দ্রুত কনডেন্সড সংস্করণ। বিশদটি বোঝার জন্য গৃহীত উত্তর এবং অন্যান্য উত্তরগুলি দেখুন।

যাইহোক:

  • gcf() মানে বর্তমান চিত্রটি পান
  • gca() মানে কারেন্ট এক্সিস পান

4
পারফেক্ট! এখনই আমার ঠিক কী দেখার দরকার ছিল .আপনার 'বাই দ্য ওয়ে'ও বেশ সহায়ক ছিল! dir(fig)আমাকে 30 এরও বেশি 'get' পদ্ধতি দেখায় তবে gcaএর কোনও get_current_axisউপাধি নেই। এই ধরণের fyi উত্তরগুলি দুর্দান্ত।
uhoh

6
আপনি আসলে এর plt.gca()পরিবর্তে করতে পারেনplt.gcf().gca()
আন্দ্রে হল্জনার

38

আপনি যদি চেনাশোনাগুলির একটি সেট প্লট করতে চান তবে আপনি এই পোস্টটি বা এই টুকরোটি দেখতে চান (কিছুটা নতুনতর)। পোস্ট নামক একটি ফাংশন প্রস্তাব circles

ফাংশনটি এর circlesমতো কাজ করে scatterতবে প্লট করা চেনাশোনাগুলির আকারগুলি ডেটা ইউনিটে থাকে।

এখানে একটি উদাহরণ:

from pylab import *
figure(figsize=(8,8))
ax=subplot(aspect='equal')

#plot one circle (the biggest one on bottom-right)
circles(1, 0, 0.5, 'r', alpha=0.2, lw=5, edgecolor='b', transform=ax.transAxes)

#plot a set of circles (circles in diagonal)
a=arange(11)
out = circles(a, a, a*0.2, c=a, alpha=0.5, edgecolor='none')
colorbar(out)

xlim(0,10)
ylim(0,10)

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


কি করে transform=ax.transAxes?
লি

3
@ এটি ডান-নীচের কোণে বৃত্তের জন্য দেখুন, ডেটাটি অক্ষের স্থানাঙ্কে রূপান্তর করুন, অর্থাৎ (1,1) অর্থ অক্ষের মধ্যে ডান-উপরের কোণা, (1,0) অর্থ ডান-নীচের কোণা ইত্যাদি
Sy

4
এটি ম্যাটপ্ল্লিটিবের একটি অংশ হওয়া উচিত।
JustAC0der

এই সঙ্গে ব্যবহার করা যেতে পারে mplleaflet? যদি তাই হয়, আপনি একটি উদাহরণ প্রদান করতে পারেন, দয়া করে?
ফ্রানসোয়া এম।

@ ফমালুসেনা এই কোড স্নিপেট যেমন খাঁটি matplotlib, আমি মনে করি এটির সাথে সামঞ্জস্য হওয়া উচিত mplleafletযদিও আমি কখনও চেষ্টা করি নি।
সিরিটিজ মেজর

21
#!/usr/bin/python
import matplotlib.pyplot as plt
import numpy as np

def xy(r,phi):
  return r*np.cos(phi), r*np.sin(phi)

fig = plt.figure()
ax = fig.add_subplot(111,aspect='equal')  

phis=np.arange(0,6.28,0.01)
r =1.
ax.plot( *xy(r,phis), c='r',ls='-' )
plt.show()

অথবা, আপনি যদি পছন্দ করেন তবে pathএস, http://matplotlib.sourceforge.net/users/path_tutorial.html দেখুন


2
একটি বৃত্তের ট্রাইগনোমেট্রিক সমীকরণ এবং 0 টিপি 360 কে অবনমিত করে, যা 0 থেকে 6.28319 রেডিয়ানে mathopenref.com/coordparamcircle.html
অ্যালেক্স পুন্নেন

19

আপনার যদি লক্ষ্য হয় যে "বৃত্ত" ডেটা স্থানাঙ্কগুলি যাই হউক না কেন 1 এর ভিজ্যুয়াল দিক অনুপাত বজায় রাখবেন, আপনি স্ক্যাটার () পদ্ধতিটি ব্যবহার করতে পারেন। http://matplotlib.org/1.3.1/api/pyplot_api.html#matplotlib.pyplot.scatter

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]
r = [100, 80, 60, 40, 20] # in points, not data units
fig, ax = plt.subplots(1, 1)
ax.scatter(x, y, s=r)
fig.show()

চিত্র একটি বিক্ষিপ্ত প্লট।  Y = 10x রেখার পাঁচটি বৃত্তের নীচে বাম থেকে উপরের ডানদিকে কমছে  যদিও গ্রাফটি বর্গক্ষেত্র আকারের, তবে y- অক্ষের এক্স-অক্ষের পরিধি 10 গুণ বেশি।  তবুও, চেনাশোনাগুলির অনুপাতের অনুপাত 1 1


11

একটি সাধারণ ব্যবহারের জন্য গৃহীত উত্তর প্রসারিত করা। নির্দিষ্টভাবে:

  1. একটি প্রাকৃতিক দিক অনুপাতের চেনাশোনাগুলি দেখুন।

  2. নতুন প্লট করা চেনাশোনাগুলি অন্তর্ভুক্ত করতে স্বয়ংক্রিয়ভাবে অক্ষ সীমা প্রসারিত করুন।

স্ব-অন্তর্ভুক্ত উদাহরণ:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.add_patch(plt.Circle((0, 0), 0.2, color='r', alpha=0.5))
ax.add_patch(plt.Circle((1, 1), 0.5, color='#00ffff', alpha=0.5))
ax.add_artist(plt.Circle((1, 0), 0.5, color='#000033', alpha=0.5))

#Use adjustable='box-forced' to make the plot area square-shaped as well.
ax.set_aspect('equal', adjustable='datalim')
ax.plot()   #Causes an autoscale update.
plt.show()

উভয়ের মধ্যে ax.add_patch(..)এবং ax.add_artist(..): পার্থক্যটি নোট করুন , কেবলমাত্র প্রাক্তনই অটোস্কালিং যন্ত্রপাতিটিকে বৃত্তটিকে বিবেচনায় রাখে (রেফারেন্স: আলোচনা ), সুতরাং উপরের কোডটি চালানোর পরে আমরা পাই:

add_patch (..) বনাম add_artist (..)

আরও দেখুন: set_aspect(..)ডকুমেন্টেশন


পাইথন 3 এ আপনাকে বের করা দরকার fig, ax = plt.subplots(), অন্যথায় আপনি দুটি উইন্ডো পাবেন (একটি ফাঁকা)।
albus_c

1

আমি (। চেনাশোনা) ব্যবহার করে প্লটগুলি দেখছি তবে আপনি যা করতে চান তার উপর ভিত্তি করে আপনি এটিও চেষ্টা করে দেখতে পারেন:

import matplotlib.pyplot as plt
import numpy as np

x = list(range(1,6))
y = list(range(10, 20, 2))

print(x, y)

for i, data in enumerate(zip(x,y)):
    j, k = data
    plt.scatter(j,k, marker = "o", s = ((i+1)**4)*50, alpha = 0.3)

লিনিয়ার অগ্রগতি পয়েন্টগুলি ব্যবহার করে সাধারণ ঘনক বৃত্তের প্লট

centers = np.array([[5,18], [3,14], [7,6]])
m, n = make_blobs(n_samples=20, centers=[[5,18], [3,14], [7,6]], n_features=2, 
cluster_std = 0.4)
colors = ['g', 'b', 'r', 'm']

plt.figure(num=None, figsize=(7,6), facecolor='w', edgecolor='k')
plt.scatter(m[:,0], m[:,1])

for i in range(len(centers)):

    plt.scatter(centers[i,0], centers[i,1], color = colors[i], marker = 'o', s = 13000, alpha = 0.2)
    plt.scatter(centers[i,0], centers[i,1], color = 'k', marker = 'x', s = 50)

plt.savefig('plot.png')

শ্রেণিবদ্ধকরণ সমস্যার বৃত্তাকার পয়েন্ট।


0

হ্যালো আমি একটি বৃত্ত আঁকার জন্য একটি কোড লিখেছি। এটি সমস্ত ধরণের চেনাশোনা আঁকতে সহায়তা করবে। চিত্রটি 0,0 এ ব্যাসার্ধ 1 এবং কেন্দ্রের সাথে বৃত্তটি দেখায় কেন্দ্র এবং ব্যাসার্ধ কোনও পছন্দ অনুসারে সম্পাদনা করা যেতে পারে।

## Draw a circle with center and radius defined
## Also enable the coordinate axes
import matplotlib.pyplot as plt
import numpy as np
# Define limits of coordinate system
x1 = -1.5
x2 = 1.5
y1 = -1.5
y2 = 1.5

circle1 = plt.Circle((0,0),1, color = 'k', fill = False, clip_on = False)
fig, ax = plt.subplots()
ax.add_artist(circle1)
plt.axis("equal")
ax.spines['left'].set_position('zero')
ax.spines['bottom'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
plt.xlim(left=x1)
plt.xlim(right=x2)
plt.ylim(bottom=y1)
plt.ylim(top=y2)
plt.axhline(linewidth=2, color='k')
plt.axvline(linewidth=2, color='k')

##plt.grid(True)
plt.grid(color='k', linestyle='-.', linewidth=0.5)
plt.show()

শুভকামনা


0

একইভাবে বিক্ষিপ্ত প্লটের জন্য আপনি বৃত্তরেখার স্টাইল সহ সাধারণ প্লটও ব্যবহার করতে পারেন। markersizeপরামিতি ব্যবহার করে আপনি একটি বৃত্তের ব্যাসার্ধকে সামঞ্জস্য করতে পারেন:

import matplotlib.pyplot as plt

plt.plot(200, 2, 'o', markersize=7)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.