2014-07-10 15 views
22

Tôi hiện đang vẽ biểu đồ thanh xếp chồng lên nhau của một lượng lớn dữ liệu phân loại và chỉ muốn hiển thị các loài quan trọng trong truyền thuyết (trong số ~ 500 tôi muốn hiển thị ~ 25). Có một cách đơn giản để làm điều này? Dưới đây là đoạn code tôi có:Chỉ hiển thị một số mục trong huyền thoại Python Matplotlib

labels=['0','20','40','60','80','100','120'] 
ax1=subj1df.plot(kind='barh', stacked=True,legend=True,cmap='Paired', grid=False) 
legend(ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.) 
label1=['Baseline','8h','24h','48h','96h','120h'] 
ax1.set_yticklabels(label1, fontdict=None, minor=False) 
plt.title('Subject 1 Phyla',fontweight='bold') 
plt.savefig('Subject1Phyla.eps', format='eps', dpi=1000) 
ax1.set_xticklabels(labels) 

Edit: cố gắng thêm này chỉ hiển thị một entry truyền thuyết, tuy nhiên chỉ trả về một huyền thoại trống:

h, l = ax1.get_legend_handles_labels() 
legend(l[4],h[4],ncol=2,loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0.) 
+0

bạn có nghĩa là bạn muốn âm mưu tất cả 500 biến của bạn, nhưng chỉ hiển thị một lựa chọn 25 trong truyền thuyết của bạn? – ThePredator

Trả lời

4

Tôi thường chèn một nhãn trống cho huyền thoại Tôi don không muốn hiển thị. Tôi đã làm một ví dụ cực kỳ đơn giản mà tôi hy vọng sẽ giúp bạn. Bạn sẽ cần phải tinh chỉnh điều này cho dữ liệu của riêng bạn nhưng các yếu tố bạn cần phải ở đó.

import matplotlib.pyplot as plt 
import numpy as np 

myY=np.random.randint(20, size=10) 
myX=np.arange(0,len(myY)) 

selected=[5,10,15] 

fig = plt.figure() 
for X,Y in zip(myX,myY): 
    if Y in selected: 
     mylabel="label = %s"%(Y); mycolor='blue' 
    else: 
     mylabel=None; mycolor='red' 
    plt.scatter(X,Y,50, color=mycolor, label=mylabel) 
plt.legend() 
plt.show() 

Điều này tạo ra cốt truyện sau: enter image description here

+2

'legend' cũng có danh sách các nghệ sĩ và danh sách các nhãn để kiểm soát chính xác những gì đi vào huyền thoại của bạn – tacaswell

+0

Điều này có thể hoạt động, nhưng có cách nào để chọn danh sách chuỗi các mục chú giải tôi muốn không? cốt truyện của tôi là một âm mưu thanh xếp chồng lên nhau của nhiều mục. – Broncos423

+0

Chắc chắn. Đối với mỗi mục nhập của bạn (được xác định bởi X, Y và tên), hãy kiểm tra xem mục nhập hiện tại của bạn có nằm trong danh sách các nhãn đã chọn mà bạn muốn hiển thị chú thích hay không. Thật khó để chỉ cho bạn cách thực hiện điều này trừ khi bạn hiển thị thêm thông tin về cách dữ liệu của bạn trông như thế nào. –

53

này hoạt động:

plt.plot(x, y,label='_nolegend_') 

source

+4

GÌ?!? Hoạt động hoàn hảo nhưng đó là một giải pháp bất ngờ như vậy :) – Owen

2

Đối với bất cứ lý do cả hai câu trả lời không làm việc cho tình hình của tôi. Có gì làm việc, và thực sự đã được chỉ ra ở trên:

huyền thoại cũng có một danh sách các nghệ sĩ và danh sách các nhãn để kiểm soát chính xác những gì đi vào huyền thoại của bạn - tacaswell 11 tháng 7 '14 tại 4:46

import pandas as pd 
import matplotlib.pyplot as plt 
import pylab 

pd.Series(range(10)).plot(color = 'grey') 
x = list(range(10)) 
y = [i + 1 for i in x] 
scat1 = plt.scatter(x, y) 

pylab.legend([scat1],['moved points'], loc = 'upper left') 

plt.show() 

kết quả của đoạn code: The result of the code:

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