matplotlib / সামুদ্রিক: হিটম্যাপ প্লটের অর্ধেক কাটা প্রথম এবং শেষ সারি


107

সমুদ্র সৈকত (এবং ম্যাটপ্লোটিলিবের সাথে পারস্পরিক সম্পর্ক ম্যাট্রিক্স) দিয়ে হিটম্যাপের পরিকল্পনা করার সময় প্রথম এবং শেষ সারিতে অর্ধেকটি কেটে নেওয়া হয়। আমি যখন এই সর্বনিম্ন কোড উদাহরণটি চালিত করি তখন এটি ঘটে।

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = pd.read_csv('https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv')
plt.figure(figsize=(10,5))
sns.heatmap(data.corr())
plt.show()

এবং এই ফলাফলটি পান (আমাকে এখনও চিত্র এম্বেড করার অনুমতি নেই) Y অক্ষের লেবেলগুলি সঠিক জায়গায় রয়েছে তবে সারিগুলি সম্পূর্ণরূপে নেই।

কিছু দিন আগে, এটি ইচ্ছাকৃতভাবে কাজ করে। তার পর থেকে, আমি টেক্সলাইভ-এক্সএটেক্স ইনস্টল করেছি তাই আমি এটি আবার সরিয়ে ফেললাম তবে এটি আমার সমস্যার সমাধান করেনি।

আমি কি অনুপস্থিত হতে পারে কোন ধারণা?


1
আপনি কি সত্য তথ্য সরবরাহ করতে পারেন? এটি যথেষ্ট ছোট বলে মনে হচ্ছে
ম্যাড পদার্থবিজ্ঞানী

1
সাধারণত, আমাদের পিক্সেলগুলির সীমানা -0.5 থেকে আকার + 0.5 হয়। মনে হচ্ছে অনুভূমিক অক্ষ সীমাটি সঠিকভাবে সেট করা আছে তবে উল্লম্ব নয়। আপনি কোথাও ইলিমের সাথে ঝামেলা করছেন?
ম্যাড পদার্থবিদ

উত্তর:


94

দুর্ভাগ্যক্রমে matplotlib 3.1.1 সমুদ্র সৈকত হিটম্যাপসটি ভেঙেছে ; এবং স্থির টিক্স সহ সাধারণভাবে উল্টানো অক্ষ।
এটি বর্তমান বিকাশের সংস্করণে স্থির হয়েছে; আপনি তাই পারেন

  • matplotlib 3.1.0 এ ফিরে যান
  • matplotlib 3.1.2 বা উচ্চতর ব্যবহার করুন
  • হিটম্যাপ সীমাটি ম্যানুয়ালি সেট করুন ( ax.set_ylim(bottom, top) # set the ylim to bottom, top)

আমি এই প্রশ্নটি প্রায় দেখতে পেয়েছি তবে কীভাবে ম্যাটপ্ল্লোব ৩.১.০ এ ফিরে যেতে হবে বা হিটম্যাপ সীমাটি ম্যানুয়ালি সেট করতে হবে (এটি চেষ্টা করার পরেও কেটে গেছে) এবং ৩.১.২ এর জন্য অপেক্ষা করতে পারি না। আমি কীভাবে ম্যাটপ্লটলিব ৩.১.০ এ ফিরে যেতে পারি?
সোজড্যানেরন

এটি কীভাবে আপনি ম্যাটপ্লোটলিব ইনস্টল করেছেন তার উপর নির্ভর করে। যেমন মাধ্যমে পিপ দেখতে এই
ImportanceOfBeingEnnest

ঠিক আছে, আমি পাইচার্মে এখনও নতুন। ধন্যবাদ, এখন এটি খুঁজে।
সোজড্যানেরন

1
@ তালহা ০ No না, আমি প্লটের সীমাবদ্ধতা বোঝাতে চাইছি। যদি ax = sns.heatmap(...), ax.set_ylim(...)আপনার সীমা হতে হবে যা সেট করুন ।
ImportanceOfBeingErnest

2
7 স্তরের জন্য আমাকে ব্যবহার করতে হয়েছিল ax.set_ylim(0 ,7)। মাত্র ax.set_ylim (7) ব্যবহার করে একটি সারি অর্ধেক রেখে দেওয়া হয়েছে।
জাজো নর্টন

81

এটি ম্যাটপ্ল্লোলিব রিগ্রেশনের মধ্যে 3.1.0 থেকে 3.1.1 এর মধ্যে একটি বাগ আপনি এটি দ্বারা সংশোধন করতে পারেন:

import seaborn as sns
df_corr = someDataFrame.corr()
ax = sns.heatmap(df_corr, annot=True) #notation: "annot" not "annote"
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)

উদাহরণস্বরূপ, এটি আমার কাজ করে না। তবে সত্যি কথা বলতে গেলে আমার সমস্যাটি অন্যরকম ছিল যে হিটম্যাপের পুরো সারিটি অনুপস্থিত ছিল। আমার জন্য সংস্করণটি ফিরিয়ে দেওয়া, যেমন আমি উপরে একটি মন্তব্যে উল্লেখ করেছি, কেবল একটাই উপায় ছিল।
সিডাক

এটি অযৌক্তিক মনে হলেও এটি কাজ করে। এর bottomচেয়ে বড় হওয়া উচিত কেন top?
এরিক ডুমিনিল

আমার জন্য কাজ করেছেন। plt.figure (figsize = (5,3)) ax = sn.heatmap (cm, annot = true, fmt = '') নীচে, শীর্ষ = ax.get_ylim () ax.set_ylim (নীচে + 0.5, শীর্ষ - 0.5) plt.xlabel ('ভবিষ্যদ্বাণী') plt.ylabel ('সত্য') plt.title ('কনফিউশন ম্যাট্রিক্স')
MPJ567

18

উপরের ব্যবহারটি স্থির করে হিটম্যাপ সীমাটি ম্যানুয়ালি সেট করে।

প্রথম

ax = sns.heatmap(...

সাথে বর্তমান অক্ষটি পরীক্ষা করে দেখুন

ax.get_ylim()
(5.5, 0.5)

সঙ্গে স্থির

ax.set_ylim(6.0, 0)

4

আমি আমার কোডটিতে এই লাইনটি যুক্ত করে এটি সমাধান করেছি matplotlib==3.1.1:

ax.set_ylim(sorted(ax.get_xlim(), reverse=True))

বিশেষ দ্রষ্টব্য। এই কাজ করার একমাত্র কারণ x-অক্ষ পরিবর্তন করা হয়নি, তাই ভবিষ্যতের এমপিএল সংস্করণগুলির সাথে নিজের ঝুঁকিতে ব্যবহার করুন


3

matplotlib 3.1.2 আউট - এটি কনডা-ফোর্জের মাধ্যমে অ্যানাকোন্ডা মেঘে পাওয়া যায় তবে আমি কনডা ইনস্টলের মাধ্যমে এটি ইনস্টল করতে পারিনি। ম্যানুয়াল বিকল্পটি কাজ করেছে: গিথুব থেকে ম্যাটপ্লটলিব ৩.১.২ ডাউনলোড করুন এবং পাইপের মাধ্যমে ইনস্টল করুন

 % curl https://codeload.github.com/matplotlib/matplotlib/tar.gz/v3.1.2 --output matplotlib-3.1.2.tar.gz
 % pip install matplotlib-3.1.2.tar.gz

আমি প্যাকেজ আপডেট করতে সক্ষম নই। আমি এই ত্রুটিটি পেয়েছি:ERROR: Could not install packages due to an EnvironmentError: [WinError 5] Access is denied: 'c:\\users\\w-book\\anaconda3\\lib\\site-packages\\matplotlib\\backends\\_backend_agg.cp37-win_amd64.pyd' Consider using the --user option or check the permissions.
জেড কচো

উপরেরটি ম্যাকোজে চেষ্টা করা হয়েছিল। উইন্ডোজ দৃশ্যের সাথে পরিচিত নয় তবে মনে হয় এটি স্থানীয় অনুমতি সংক্রান্ত সমস্যা।
rustyDev

প্রতিক্রিয়ার জন্য আপনাকে ধন্যবাদ. আমি পুরানো সংস্করণ (matplotlib-3.1.0) ইনস্টল করে শেষ করেছি।
জেড কচো


0

rustyDev কনডা-ফোর্জের বিষয়ে ঠিক, তবে গিথুব ডাউনলোড থেকে আমার কোনও ম্যানুয়াল পাইপ ইনস্টল করার দরকার নেই। আমার জন্য, উইন্ডোজে, এটি সরাসরি কাজ করেছিল। প্লটগুলি আবার সব সুন্দর।

https://anaconda.org/conda-forge/matplotlib

conda install -c conda-forge matplotlib

forচ্ছিক পয়েন্টগুলি, উত্তরের প্রয়োজন নেই:

এরপরে, আমি অন্যান্য পদক্ষেপগুলি চেষ্টা করেছি, তবে সেগুলির দরকার নেই: কনডা প্রম্পটে: কনডা অনুসন্ধান ম্যাটপ্ল্লোব - ইনফো কোনও নতুন সংস্করণ সম্পর্কিত তথ্য দেখায় নি, সবচেয়ে সাম্প্রতিক তথ্যটি ছিল 3.1.1 এর জন্য। এইভাবে আমি পাইপ ব্যবহার করে চেষ্টা করেছি pip install matplotlib==3.1.2তবে পাইপ "প্রয়োজনীয়তা ইতিমধ্যে সন্তুষ্ট" বলে

তারপরে মিডিয়াম.com/@rakshithvasudev/… অনুসারে সংস্করণটি পাওয়া python - import matplotlib - matplotlib.__version__যায় যে 3.1.2 সফলভাবে ইনস্টল হয়েছিল

বিটিডব্লিউ, স্প্রেডারকে v4.0.0 এ আপডেট করার পরে আমার সরাসরি এই ত্রুটি ছিল। ত্রুটিটি একটি বিভ্রান্তির ম্যাট্রিক্সের প্লটে ছিল। ইতিমধ্যে কয়েক মাস আগে এটি উল্লেখ করা হয়েছিল। stackoverflow.com/questions/57225685/… যা ইতিমধ্যে এই সমুদ্রযুক্ত প্রশ্নের সাথে যুক্ত।


-1

কনডা ম্যাটপ্লটলিব ইনস্টল করুন = 3.1.0 .0

এটি আমার পক্ষে কাজ করেছে এবং ৩.১.১ থেকে ৩.১.০ পর্যন্ত ম্যাটপ্লটলিবকে ডাউনগ্রেড করেছে এবং হিটম্যাপগুলি সঠিকভাবে আচরণ করতে শুরু করেছে


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