পাইথন ম্যাটপ্ল্লোটিব-এর এক্স-অক্ষ এবং y- অক্ষের আঁশকে কীভাবে সমান করতে হবে?


128

আমি বর্গাকার গ্রাফটিতে লাইন আঁকতে চাই।

মানদন্ড x-axisএবং y-axisএকই হতে হবে।

যেমন এক্স 0 থেকে 10 এর মধ্যে হয় এবং এটি স্ক্রিনে 10 সেমি থাকে। y এর মান 0 থেকে 10 পর্যন্ত হতে হবে এবং 10 সেমিও হতে হবে।

স্কয়ারের আকারটি বজায় রাখতে হবে, এমনকি আমি উইন্ডো আকারের সাথে ঘোরাঘুরি করি।

বর্তমানে, আমার গ্রাফটি উইন্ডো আকারের সাথে একত্রে স্কেল করে।

আমি কীভাবে এটি অর্জন করতে পারি?

হালনাগাদ:

আমি নিম্নলিখিত চেষ্টা করেছিলাম, কিন্তু এটি কার্যকর হয়নি।

plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.axis('equal')

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

1
@জোরিস মূলত আমি একটি নির্দিষ্ট স্কোয়ার গ্রাফ চাই। এমনকি যদি আমি উইন্ডোটি সর্বাধিক করি তবে আমি আশা করি যে স্কয়ারটি সংরক্ষিত থাকবে। আমার স্ক্রিনটি প্রশস্ত, আমি উইন্ডোটি সর্বাধিক করার পরে, গ্রাফটিও আয়তক্ষেত্রাকার হয়ে যায়। আমি এটি এখনও
স্কোয়ারে

আবার, আপনি একটি সম্পূর্ণ কোড উদাহরণ পোস্ট করতে পারেন। কারণ প্রদত্ত উত্তরের এটি করা উচিত, এটি একটি বর্গ হিসাবে সংরক্ষণ করুন। এর প্রস্থ বা উচ্চতা সংরক্ষণ করবেন না, তবে এর আকার সংরক্ষণ করুন।
জরিস

1
এসওতে অন্যের সাথে কথাবার্তা বলার সময় দয়া করে কিছুটা কম ক্ষতিকারক হওয়ার চেষ্টা করুন। আপনি মানুষের দয়া থেকে সাহায্য পেয়ে যাচ্ছেন তাই কিছুটা কম যোগ্যতার সাথে কাজ করুন।
টাকসওয়েল

3 ডি এর জন্য আপনাকে কিছুটা অতিরিক্ত কাজ করতে হবে: স্ট্যাকওভারফ্লো.com
ট্রেভর বয়ড স্মিথ

উত্তর:


179

এটি করার জন্য আপনাকে এপিআইয়ের আরও গভীর গর্ত করতে হবে:

from matplotlib import pyplot as plt
plt.plot(range(5))
plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.gca().set_aspect('equal', adjustable='box')
plt.draw()

set_aspect জন্য ডক


4
অসাধারণ! এটি প্রকৃতপক্ষে কবজির মতো কাজ করে। আপনি যদি কিছু মনে করেন না তবে দয়া করে আমাকে কি করতে plt.plot(range(5))এবং বলতে plt.gca().set_aspect('equal', adjustable='box')পারেন? এছাড়াও, আমি লক্ষ্য করেছি যে আমার কাছে না plt.draw()থাকলেও প্লটটি এখনও প্রদর্শিত হবে। তাহলে এর ব্যবহার কী?
সিবস জুয়া খেলা

plotশুধু কিছু দেখাতে আছে। জন্য set_aspectডকুমেন্টেশন লিংক পড়ুন। এটি কেবল drawরেন্ডার হয়ে গেছে তা নিশ্চিত করা।
টাকসওয়েল

1
প্লট করার জন্য কিছু জাল তথ্য থাকতে (এটি একটি সরলরেখার চক্রান্ত করা উচিত ছিল)।
টাকসওয়েল

1
@ perfectionm1ng কোনও উদ্বেগ নেই, আপনি কী জিজ্ঞাসা করছেন তা নির্ধারণ করতে আমাকে কিছুটা সময় নিয়েছে।
টাকসওয়েল

1
ঠিক সীমা নির্দিষ্ট না করেই এটি করার কোনও উপায় আছে কি? আমি আশা করতাম যে সেখানে একই স্কেল এবং উভয় অক্ষের জন্য টিক্স সহ একটি বর্গক্ষেত্রের প্লট পাওয়ার জন্য একটি সাধারণ কমান্ড হবে। ধন্যবাদ
হতবুদ্ধি

70
plt.axis('scaled')

আমার জন্য ভাল কাজ করে।


আমার জন্যও কাজ করেছেন। সীমাবদ্ধতা / টিক্স সেট করার আগে কেবল এটি ব্যবহারের বিষয়টি নিশ্চিত করুন, কারণ এটি স্বয়ংক্রিয়ভাবে পুনঃবর্তিত হবে।
অ্যান্ড্রু

3
দুঃখিত, plt.axis ('স্কেলড') পাইথন ৩.7 এবং ম্যাটপ্ল্লোলিব - ম্যাটপ্লোটিলিব == ৩.১.০ তে আমার পক্ষে কাজ করে নি!
ishষি জেইন

19

এর মতো কিছু চেষ্টা করুন:

import pylab as p
p.plot(x,y)
p.axis('equal')
p.show()

এটি আমার সিস্টেমে কাজ করে, সম্ভবত আপনি যে কোডটিতে কাজ করছেন তার একটি অংশটি প্রদর্শন করতে পারেন? সমস্যাটি দ্রুত সমাধানে সহায়তা করতে সক্ষম হতে পারে।
Dman2

এটি সাধারণভাবে কাজ করে না। অক্ষগুলি সমান, তবে প্লটটি বর্গক্ষেত্র নয়, যদি না প্লটিং উইন্ডোটি বর্গক্ষেত্র হয়। ম্যাটপ্লটলিব ২.০
ডাইভেনেক্স

P.axis('equal')মত মনে হচ্ছে P.gca().set_aspect('equal', adjustable='datalim')। যদি adjustable='box'তা হয় তবে প্লটটি বর্গক্ষেত্র হয়।
এভেজেনি সার্জিভ

আমি অবশ্যই এর বাইরে একটি বর্গক্ষেত্র বক্স পাই না
পিটার ড্রেক

পাইলাব অবহেলা করা হয়েছে
এরিক

19

দেখুন ডকুমেন্টেশন উপর plt.axis()। এই:

plt.axis('equal')

কাজ করে না কারণ এটি বৃত্তগুলিকে বিজ্ঞপ্তিযুক্ত করতে অক্ষের সীমা পরিবর্তন করে। আপনি যা চান তা হ'ল:

plt.axis('square')

এটি সমান অক্ষ সহ একটি বর্গাকার প্লট তৈরি করে।

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