পাইথনে ম্যাটপ্ল্লোলিব সহ লোগারিথমিক অক্ষগুলি প্লট করুন


369

আমি matplotlib ব্যবহার করে একটি লোগারিদমিক অক্ষ সহ একটি গ্রাফ প্লট করতে চাই।

আমি ডক্সটি পড়ছি, তবে সিনট্যাক্সটি বের করতে পারি না। আমি জানি যে এটি সম্ভবত 'scale=linear'প্লটের আর্গুমেন্টগুলির মতো সাধারণ কিছু , তবে আমি এটি সঠিকভাবে পেয়েছি বলে মনে হয় না

নমুনা প্রোগ্রাম:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color='blue', lw=2)
pylab.show()

উত্তর:


384

আপনি Axes.set_yscaleপদ্ধতিটি ব্যবহার করতে পারেন । এটি আপনাকে Axesবস্তু তৈরির পরে স্কেল পরিবর্তন করতে দেয় । এটি আপনাকে যদি প্রয়োজন হয় ব্যবহারকারীকে স্কেল বাছাই করতে একটি নিয়ন্ত্রণ তৈরি করার অনুমতি দেয়।

যুক্ত করার জন্য সম্পর্কিত লাইনটি হ'ল:

ax.set_yscale('log')

আপনি 'linear'লিনিয়ার স্কেলে ফিরে যেতে ব্যবহার করতে পারেন। আপনার কোডটি কেমন দেখাচ্ছে তা এখানে:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)

line, = ax.plot(a, color='blue', lw=2)

ax.set_yscale('log')

pylab.show()

ফলাফলের তালিকা


6
এই পদ্ধতিটি দুর্দান্ত, যেহেতু এটি "প্লট" দিয়েই নয় (যেমন সেলমিগক্স / সেমিলজি যা করে) সমস্ত ধরণের প্লট (উদাহরণস্বরূপ হিস্টোগ্রাম) নিয়ে কাজ করে
টিম হুইটকম্ব

16
আমি এখানে দুটি শক্তির অক্ষর কীভাবে ব্যবহার করব তা সন্ধান করতে এসেছি: পাইলাব.gca ()। সেট_এক্সস্কেল ('লগ', বেসেক্স = 2)
zje

53
ম্যাটপ্ল্লোব আছে semilogy()। তদ্ব্যতীত, ব্যবহারের pyplot.yscale()চেয়ে সরাসরি ব্যবহার করা সহজ ax.set_yscale('log'), কারণ axবস্তুটি পাওয়ার প্রয়োজন নেই (যা সবসময় তাত্ক্ষণিকভাবে উপলব্ধ হয় না)।
এরিক হে লেবিগোট

5
আপনি যদি উভয় অক্ষের উপর লগ স্কেলগুলি চান, তবে loglog()এক্স-অক্ষে চেষ্টা করুন বা চেষ্টা করুনsemilogx()
ড্রেভিকো

10
@ ইওল ​​আমি বিপরীতে পরামর্শ দেব। একটি স্পষ্ট axবস্তু ব্যবহার করা ভাল যা ব্যবহার করতে pyplotযা কেবলমাত্র আপনি চাইছেন অক্ষগুলিতে প্রয়োগ হতে পারে।
টাকাসওয়েল

288

প্রথমত, এটি মেশানো pylabএবং pyplotকোড করা খুব পরিপাটি নয় । আরও কি, পাইপ্লট শৈলী পাইলব ব্যবহারের চেয়ে বেশি পছন্দ করা হয়

এখানে কেবলমাত্র pyplotফাংশন ব্যবহার করে কিছুটা সাফ আপ কোড দেওয়া হয়েছে :

from matplotlib import pyplot

a = [ pow(10,i) for i in range(10) ]

pyplot.subplot(2,1,1)
pyplot.plot(a, color='blue', lw=2)
pyplot.yscale('log')
pyplot.show()

প্রাসঙ্গিক কাজ হয় pyplot.yscale()। আপনি যদি অবজেক্ট-ওরিয়েন্টেড সংস্করণ ব্যবহার করেন তবে এটি পদ্ধতি দ্বারা প্রতিস্থাপন করুন Axes.set_yscale()। মনে রাখবেন যে আপনি pyplot.xscale()(বা ব্যবহার করে) এক্স অক্ষের স্কেলও পরিবর্তন করতে পারেনAxes.set_xscale() ) ।

আমার প্রশ্নটি পরীক্ষা করুন 'লগ' এবং 'সিমলগ' এর মধ্যে পার্থক্য কী? ম্যাটপ্ল্লোব অফার করে এমন গ্রাফ আইশের কয়েকটি উদাহরণ দেখতে see


কীভাবে এটি করতে হবে তা নির্ধারণের জন্য খুব কঠিন সময় ব্যয় করেছিল। এই উত্তর আমার দিন বাঁচায়!
এইচওয়েডে

13
pyplot.semilogy()আরও সরাসরি।
এরিক হে লেবিগোট

64

আপনার প্লটের পরিবর্তে কেবল সেলিমি ব্যবহার করতে হবে :

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)

line, = ax.semilogy(a, color='blue', lw=2)
show()

1
এলওএল, আমি পুরো সময়ের জন্য লগ (ফ্লোটআরে) চেষ্টা করছিলাম, ধন্যবাদ আপনি আমার দিনটি রক্ষা করেছেন
প্রদীপ

5
রয়েছে semilogx । আপনার যদি উভয় অক্ষতে
ড্রেভিকো

40

আপনি যদি লগারিদমের ভিত্তি পরিবর্তন করতে চান তবে কেবল যুক্ত করুন:

plt.yscale('log',basey=2) 
# where basex or basey are the bases of log

8

আমি জানি এটি সামান্য অফ-টপিক, যেহেতু কিছু মন্তব্যে ax.set_yscale('log')"নিকৃষ্ট" সমাধান হিসাবে উল্লেখ করা হয়েছে বলে আমি ভেবেছিলাম প্রত্যাবর্তনের কারণ হতে পারে। আমি ব্যবহারের সুপারিশ করব নাax.set_yscale('log') হিস্টোগ্রাম এবং বার প্লটের জন্য । আমার সংস্করণে (0.99.1.1) আমি কিছু রেন্ডারিং সমস্যা নিয়ে চলেছি - নিশ্চিত না যে এই সমস্যাটি কতটা সাধারণ। তবে বার এবং হিস্ট উভয়েরই লগ করতে y- স্কেল সেট করার জন্য alচ্ছিক যুক্তি রয়েছে, যা সূক্ষ্মভাবে কাজ করে।

তথ্যসূত্র: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist


5

সুতরাং যদি আপনি কেবল অপ্রয়োজনীয় এপিআই ব্যবহার করে থাকেন যেমন আমি প্রায়শই থাকি (আমি এটি অনেকটা আইপিথনে ব্যবহার করি) তবে এটি কেবল সহজ

yscale('log')
plot(...)

আশা করি এটি একটি সহজ উত্তর খুঁজছেন কেউ সাহায্য করবে! :)।


-1

আপনি নীচে কোড ব্যবহার করতে পারেন:

np.log(df['col_whose_log_you_need']).iplot(kind='histogram', bins=100,
                                   xTitle = 'log of col',yTitle ='Count corresponding to column',
                                   title='Distribution of log(col_whose_log_you_need)')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.