2013-01-06 7 views
18

मैं पांडा डेटाफ्रेम से कई लाइनों को प्लॉट करना चाहता हूं और प्रत्येक पंक्ति के लिए अलग-अलग विकल्प सेट करना चाहता हूं। मैं की तरहपायथन पांडा, एकाधिक लाइनों के लिए प्लॉटिंग विकल्प

testdataframe=pd.DataFrame(np.arange(12).reshape(4,3)) 
testdataframe.plot(style=['s-','o-','^-'],color=['b','r','y'],linewidth=[2,1,1]) 

कुछ करना चाहते हैं यह कुछ त्रुटि संदेश बढ़ा देंगे:

  • linewidth

  • शैली में मैं 'एस' का उपयोग नहीं कर सकते हैं एक सूची के साथ प्रतिदेय नहीं है और 'ओ' या कोई अन्य वर्णमाला प्रतीक, सूची में रंगों को परिभाषित करते समय

इसके अलावा वहां भी है कुछ और सामान जो मुझे अजीब लगता है

  • जब मैं ऊपर कोड testdataframe[0].plot() को एक और साजिश आदेश जोड़ने यह एक ही साजिश में इस लाइन साजिश होगा, अगर मैं आदेश testdataframe[[0,1]].plot() जोड़ने यह कथानक को एक नया पैदा करेगा

  • तो मैं testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y']) कहेंगे यह शैली में एक सूची के साथ ठीक है, लेकिन नहीं रंग में एक सूची

आशा किसी को मदद कर सकते हैं, धन्यवाद के साथ।

उत्तर

32

आप बहुत करीब हैं!

आप शैलियों की सूची में रंग निर्दिष्ट कर सकते हैं:

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

testdataframe = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C']) 
styles = ['bs-','ro-','y^-'] 
linewidths = [2, 1, 4] 
fig, ax = plt.subplots() 
for col, style, lw in zip(testdataframe.columns, styles, linewidths): 
    testdataframe[col].plot(style=style, lw=lw, ax=ax) 

भी ध्यान रखें कि plot विधि एक matplotlib.axes वस्तु ले जा सकते हैं, तो आप (यदि आप चाहते हैं) इसी प्रकार अनेक कॉल कर सकते हैं:

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

testdataframe1 = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C']) 
testdataframe2 = pd.DataFrame(np.random.normal(size=(4,3)), columns=['D', 'E', 'F']) 
styles1 = ['bs-','ro-','y^-'] 
styles2 = ['rs-','go-','b^-'] 
fig, ax = plt.subplots() 
testdataframe1.plot(style=styles1, ax=ax) 
testdataframe2.plot(style=styles2, ax=ax) 

इस मामले में वास्तव में व्यावहारिक नहीं है, लेकिन अवधारणा बाद में काम में आ सकती है।

+1

thx, लेकिन यह लाइन चौड़ाई के साथ मदद नहीं करता है? मैं भी कुछ स्वयं परिभाषित रंग का उपयोग करना चाहता हूं जैसे own_color = '# FF0000' और फिर यह उस तरह से कॉल करने योग्य नहीं है। – Joerg

+0

तो मैं केवल कॉलम के माध्यम से पुनरावृत्त करने के लिए सोच सकता हूं। मेरे संपादनों को पहले उदाहरण में देखें। –

+3

हाँ, यही वह है जो मैं अभी उपयोग कर रहा हूं। लेकिन मुझे आश्चर्य है कि क्या वे इस तरह के सीधे आगे के काम के लिए केवल यह बेकार तरीका है। लेकिन आपकी मदद के लिए बहुत धन्यवाद !! – Joerg

6

dataframe को ध्यान में रखते testdataframe

testdataframe = pd.DataFrame(np.arange(12).reshape(4,3)) 

print(testdataframe) 

    0 1 2 
0 0 1 2 
1 3 4 5 
2 6 7 8 
3 9 10 11 

आप styles में के रूप में तार की एक सूची नीचे परिभाषित में styles जोड़ सकते हैं। मैं भी lws

styles=['bs-', 'ro-', 'y^-'] 
lws = [2, 1, 1] 

में linewidths को परिभाषित करेंगे हम style पैरामीटर के लिए सूची styles गुजर testdataframe पर plot विधि का उपयोग कर सकते हैं। ध्यान दें कि हम एक शब्दकोश (और शायद अन्य चीजें भी) पास कर सकते थे।

हालांकि, लाइन चौड़ाई आसानी से संभाली नहीं जाती है। मैं पहले AxesSubplot ऑब्जेक्ट को कैप्चर करता हूं और रेखा चौड़ाई को सेट करने वाली लाइन विशेषताएँ पर पुनरावृत्ति करता हूं।

ax = testdataframe.plot(style=styles) 
for i, l in enumerate(ax.lines): 
    plt.setp(l, linewidth=lws[i]) 

enter image description here

3

तो मुझे लगता है इस सवाल का जवाब एक ही तर्क में रंग और शैली पारित करने में निहित है। निम्नलिखित उदाहरण पांडा 0.1 9 के साथ काम करता है।2:

testdataframe=pd.DataFrame(np.arange(12).reshape(4,3)) 
testdataframe.plot(style=['r*-','bo-','y^-'], linewidth=2.0) 

दुर्भाग्यवश, ऐसा लगता है कि matplotlib के इनपुट के रूप में कई पंक्ति चौड़ाई पास करना संभव नहीं है। आपकी मदद के लिए