मेटप्लोटलिब / सीबोर्न: हीटमैप प्लॉट के आधे हिस्से में पहली और आखिरी पंक्ति में कटौती


108

जब सीबॉर्न के साथ हीटमैप्स की साजिश रचते हैं (और मैटप्लोटलिब के साथ सहसंबंध मैट्रेस) पहली और आखिरी पंक्ति को आधा में काट दिया जाता है। ऐसा तब भी होता है जब मैं यह न्यूनतम कोड उदाहरण चलाता हूं जो मुझे ऑनलाइन मिला था।

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 तक होती है। ऐसा लगता है कि क्षैतिज अक्ष सीमाएं सही ढंग से सेट हैं, लेकिन ऊर्ध्वाधर नहीं। क्या आप कहीं भी चिल्ला रहे हैं?
मैड फिजिसिस्ट

जवाबों:


95

दुर्भाग्य से matplotlib 3.1.1 ने समुद्री जलप्रपात को तोड़ दिया ; और फिक्स्ड टिक्स के साथ सामान्य उल्टे कुल्हाड़ियों में।
यह वर्तमान विकास संस्करण में तय किया गया है; आप ऐसा कर सकते हैं

  • matplotlib 3.1.0 पर वापस जाएं
  • matplotlib 3.1.2 या उच्चतर का उपयोग करें
  • मैन्युअल रूप से हीटमैप सीमाएँ निर्धारित करें ( ax.set_ylim(bottom, top) # set the ylim to bottom, top)

मैंने इस प्रश्न को चारों ओर देखा है, लेकिन अपरिचित हूं कि कैसे वापस matplotlib 3.1.0 पर वापस लौटें या मैन्युअल रूप से हीटमैप सीमाएं निर्धारित करें (यह कोशिश की, लेकिन अभी भी काट दिया गया है) और 3.1.2 का इंतजार नहीं कर सकता। मैं वापस कैसे matplotlib 3.1.0 वापस कर सकता है?
सोज़डानरॉन

यह इस बात पर निर्भर करता है कि आपने कैसे matplotlib स्थापित किया है। जैसे पाइप के माध्यम से यह देखें ।
ImportanceOfBeingErnest

ठीक है, मैं अभी भी PyCharm के लिए नया हूं। यह अभी पता लगा, धन्यवाद।
SoDDaneron

1
@ talha06 नहीं मेरा मतलब कथानक की सीमा है। यदि 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 के बीच matplotlib प्रतिगमन में इसकी एक बग। आप इसे इसके द्वारा ठीक कर सकते हैं:

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))

एनबी। इसका एकमात्र कारण यह है कि एक्स-अक्ष नहीं बदला गया है, इसलिए भविष्य के mpl संस्करणों के साथ अपने जोखिम पर उपयोग करें


3

matplotlib 3.1.2 बाहर है - यह कोंडा-फोर्ज के माध्यम से एनाकोंडा क्लाउड में उपलब्ध है, लेकिन मैं इसे कॉन्डा इंस्टॉल के माध्यम से स्थापित करने में सक्षम नहीं था। मैनुअल विकल्प ने काम किया: गिटपब से 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.
जेड काछो

ऊपर MacOS में कोशिश की गई थी। विंडोज परिदृश्य से परिचित नहीं है, लेकिन ऐसा लगता है कि यह एक स्थानीय अनुमति समस्या है।
रस्टी डेव

जवाब देने के लिए धन्यवाद। मैंने पुराने संस्करण (matplotlib-3.1.0) को स्थापित करना समाप्त कर दिया।
जेड काछो


0

RustyDev, conda-forge के बारे में सही है, लेकिन मुझे github डाउनलोड से मैन्युअल पाइप इंस्टॉल करने की आवश्यकता नहीं थी। मेरे लिए, विंडोज पर, इसने सीधे काम किया। और भूखंड फिर से सभी अच्छे हैं।

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

conda install -c conda-forge matplotlib

वैकल्पिक बिंदु, उत्तर के लिए आवश्यक नहीं:

बाद में, मैंने अन्य चरणों की कोशिश की, लेकिन उनकी आवश्यकता नहीं है: कॉन्डा प्रॉम्प्ट में: कोंडा खोज matplotlib --info ने कोई नया संस्करण जानकारी नहीं दिखाई, सबसे हाल की जानकारी 3.1.1 के लिए थी। इस प्रकार मैंने पाइप का उपयोग करने की कोशिश की pip install matplotlib==3.1.2लेकिन पाइप कहता है "आवश्यकता पहले से ही संतुष्ट है"

तब मध्यम.com/@rakshithvasudev/… के अनुसार संस्करण प्राप्त करना python - import matplotlib - matplotlib.__version__दर्शाता है कि 3.1.2 सफलतापूर्वक स्थापित किया गया था

Btw, मुझे यह त्रुटि सीधे स्पाइडर को v4.0.0 में अपडेट करने के बाद मिली। त्रुटि एक भ्रम मैट्रिक्स की साजिश में थी। इसका उल्लेख कुछ महीने पहले ही किया गया था। stackoverflow.com/questions/57225685/… जो पहले से ही इस समुद्री सवाल से जुड़ा हुआ है।


-1

conda install matplotlib = 3.1.0

इसने मेरे लिए काम किया और ३.१.१ से ३.१.० तक मैटप्लोटिब को डाउनग्रेड कर दिया और हीटमैप ने सही व्यवहार करना शुरू कर दिया


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.