2013-01-06 33 views
18

Tôi muốn vẽ nhiều đường từ một khung dữ liệu gấu trúc và thiết lập các tùy chọn khác nhau cho mỗi dòng. Tôi muốn làm điều gì đó nhưCon gấu trúc Python, Tùy chọn vẽ cho nhiều dòng

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

này sẽ nâng cao một số thông báo lỗi:

  • độ rộng vạch phổ là không thể được gọi với một danh sách

  • Trong phong cách Tôi không thể sử dụng 's' và 'o' hoặc bất kỳ biểu tượng chữ cái nào khác, khi xác định màu sắc trong danh sách

Ngoài ra còn có một số nội dung hơn mà có vẻ lạ với tôi

  • khi tôi thêm một lệnh âm mưu các mã trên testdataframe[0].plot() nó sẽ âm mưu dòng này trong cốt truyện tương tự, nếu tôi thêm các lệnh testdataframe[[0,1]].plot() nó sẽ tạo ra một âm mưu mới

  • Nếu tôi sẽ gọi testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y']) nó là tốt với một danh sách trong phong cách, nhưng không phải với một danh sách trong màu

Hope ai đó có thể giúp đỡ, cảm ơn.

Trả lời

32

Bạn đang rất gần!

Bạn có thể chỉ định các màu trong danh sách phong cách:

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) 

Cũng lưu ý rằng phương pháp plot có thể mất một đối tượng matplotlib.axes, vì vậy bạn có thể làm cho nhiều cuộc gọi như thế này (nếu bạn muốn):

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) 

Không thực sự thực tế trong trường hợp này, nhưng khái niệm có thể hữu ích sau này.

+1

thx để được trợ giúp, nhưng điều này không giúp với chiều rộng của dòng? Tôi cũng muốn sử dụng một số màu tự định nghĩa như own_color = '# FF0000' và sau đó nó không thể gọi theo cách đó. – Joerg

+0

sau đó tôi chỉ có thể nghĩ để lặp qua các cột. xem các chỉnh sửa của tôi cho ví dụ đầu tiên. –

+3

Vâng, đó là những gì tôi đang sử dụng ngay bây giờ. Nhưng tôi tự hỏi liệu họ có phải là cách vụng về này cho một nhiệm vụ thẳng tiến. Nhưng cảm ơn vì sự giúp đỡ của bạn !! – Joerg

6

Xét 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 

Bạn có thể kết hợp styles vào một danh sách duy nhất của chuỗi như trong styles định nghĩa dưới đây. Tôi cũng sẽ xác định linewidths trong lws

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

Chúng ta có thể sử dụng phương pháp plot trên testdataframe đi qua các danh sách styles tới tham số style. Lưu ý rằng chúng tôi có thể cũng đã thông qua một từ điển (và có lẽ cả những thứ khác nữa).

Tuy nhiên, độ rộng của đường không được xử lý dễ dàng. Lần đầu tiên tôi chụp đối tượng AxesSubplot và lặp lại trên các thuộc tính dòng thiết lập chiều rộng dòng.

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

enter image description here

3

Vì vậy, tôi nghĩ rằng câu trả lời nằm trong việc thông qua màu sắc và phong cách lập luận tương tự. Ví dụ sau làm việc với gấu trúc 0,19.2:

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

Thật không may, có vẻ như vượt qua nhiều chiều rộng đường làm đầu vào cho matplotlib là không thể.

Các vấn đề liên quan