কীভাবে সামুদ্রিক ল্যাম্পলট ফেসট্রিডে কিছু xlim এবং ylim সেট করবেন


87

আমি লিনিয়ার রিগ্রেশন প্লট করতে সিবর্নের ল্যাম্পলট ব্যবহার করছি, আমার ডেটাসেটকে একটি শ্রেণিবদ্ধ ভেরিয়েবলের সাথে দুটি গ্রুপে বিভক্ত করছি।

এক্স এবং ওয়াই উভয়ের জন্য, আমি উভয় প্লটের উপর ম্যানুয়ালি নীচের গণ্ডিটি সেট করতে চাই , তবে উপরের সীমানাটি সিবার্ন ডিফল্টে রেখে দেব। এখানে একটি সাধারণ উদাহরণ:

import pandas as pd
import seaborn as sns
import random

n = 200
random.seed(2014)
base_x = [random.random() for i in range(n)]
base_y = [2*i for i in base_x]
errors = [random.uniform(0,1) for i in range(n)]
y = [i+j for i,j in zip(base_y,errors)]

df = pd.DataFrame({'X': base_x,
                   'Y': y,
                   'Z': ['A','B']*(n/2)})

mask_for_b = df.Z == 'B'
df.loc[mask_for_b,['X','Y']] = df.loc[mask_for_b,] *2

sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)

এটি নিম্নলিখিত ফলাফলগুলি দেয়: এখানে চিত্র বর্ণনা লিখুন

তবে এই উদাহরণে আমি xlim এবং ylim (0, *) হতে চাই। আমি sns.plt.ylim এবং sns.plt.xlim ব্যবহার করার চেষ্টা করেছি তবে এগুলি কেবল ডান হাতের প্লটকেই প্রভাবিত করে। উদাহরণ:

sns.plt.ylim(0,)
sns.plt.xlim(0,)

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

আমি ফেসট্রিডের প্রতিটি প্লটের জন্য কীভাবে xlim এবং ylim অ্যাক্সেস করতে পারি?


4
যাইহোক, আপনি যদি numpy.randomমডিউলটির সাথে নিজেকে পরিচিত হন তবে আপনি এলোমেলো ডেটা তৈরি করতে নিজেকে অনেক সময় বাঁচাতে পারেন (যা করার জন্য খুব দরকারী জিনিস হতে পারে!)। উদাহরণস্বরূপ, আপনি পেতে base_xএবং base_yসাথে পারে base_x = np.random.rand(n); base_y = base_x * 2yপরিবর্তনশীল তারপর একইভাবে ভেক্টরকৃত অপারেশন দিয়ে তৈরি করা যেতে পারে।
mwaskom

উত্তর:


146

lmplotফাংশন একটি ফেরৎ FacetGridউদাহরণস্বরূপ। এই অবজেক্টটির একটি পদ্ধতি বলা হয়েছে set, যাতে আপনি key=valueজোড়গুলি পাস করতে পারেন এবং সেগুলি গ্রিডের প্রতিটি অক্ষের অবজেক্টে সেট করা হবে।

দ্বিতীয়ত, আপনি Noneডিফল্ট হিসাবে যে মানটি রাখতে চান তার জন্য পাস করে আপনি ম্যাটপ্লোটিলেবে একটি অক্ষ সীমাতে কেবল একটি পক্ষ সেট করতে পারেন ।

এগুলি একসাথে রাখলে, আমাদের রয়েছে:

g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))

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


4
ওহ, এটা সহজ। দস্তাবেজগুলিতে সন্ধান করলে মনে হয় g.setপ্রতিটি সাবপ্লটই এটি পরিবর্তন করে। G.axes তাদের পৃথক পৃথকভাবে সেট করার প্রস্তাবিত উপায়ে পৌঁছেছে?
exp1orer

6
হ্যাঁ, যদি আপনি কোনও দিকগুলির একটিতে (বা আরও বেশি, তবে সমস্ত নয়) কিছু সম্পত্তি সেট করতে চান তবে আপনার g.axesযেমন অ্যারেটি ব্যবহার করা উচিত , যেমন DRV এর পরামর্শ অনুসারে।
mwaskom

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। 5 বছর পরে এবং এটি এখনও কাজ করে এবং গৃহীত উত্তরের চেয়ে আরও দক্ষ।
বিবিনেট 36

81

আপনার নিজের নিজেই অক্ষগুলি ধরে রাখা দরকার। সম্ভবত সবচেয়ে পরিষ্কার উপায় হ'ল আপনার শেষ সারিটি পরিবর্তন করা:

lm = sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)

তারপরে আপনি অক্ষ অক্ষগুলি (অক্ষগুলির একটি অ্যারে) ধরে রাখতে পারেন:

axes = lm.axes

এর পরে আপনি অক্ষগুলির বৈশিষ্ট্যগুলি টুইঙ্ক করতে পারেন

axes[0,0].set_ylim(0,)
axes[0,1].set_ylim(0,)

তৈরি করে:

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

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