2013-08-07 29 views
6

Tôi vẽ biểu đồ thanh bằng cách đọc dữ liệu từ CSV bằng cách sử dụng gấu trúc trong Python. Tôi đọc một CSV thành DataFrame và vẽ chúng bằng matplotlib.Thay đổi hướng đánh dấu và vị trí chú thích của ô

Sau đây là cách CSV của tôi trông giống như:

SegmentName Sample1 Sample2 Sample3 

Loop1   100  100  100 

Loop2   100  100  100 

res = DataFrame(pd.read_csv("results.csv", index_col="SegmentName")) 

tôi âm mưu và thiết lập huyền thoại ở bên ngoài.

plt.figure() 
ax = res.plot(kind='bar') 
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5)) 

plt.savefig("results.jpg") 

Tuy nhiên, các dấu tick trục x được định hướng theo chiều dọc và do đó tôi không thể đọc được văn bản. Ngoài ra huyền thoại của tôi ở bên ngoài cũng bị cắt.

Tôi có thể thay đổi hướng của các dấu tick để nằm ngang hay không, sau đó điều chỉnh toàn bộ hình sao cho chú giải hiển thị?

enter image description here

+0

Ofcourse chúng ta cần, nhập khẩu NumPy như np gấu trúc nhập khẩu theo pd từ gấu trúc nhập * nhập khẩu matplotlib.pyplot như plt – user2450971

+0

Bao gồm một liên kết đến hình ảnh của bạn, vì vậy chúng tôi có thể cập nhật câu hỏi của bạn để bao gồm hình ảnh. – hooy

+0

Đây là ảnh chụp màn hình. http://imageshack.us/photo/my-images/14/srzn.jpg/ – user2450971

Trả lời

6

Thử sử dụng từ khóa 'xoay vòng' khi bạn đặt nhãn. Ví dụ:

plt.xlabel('hi',rotation=90) 

Hoặc nếu bạn cần để xoay các nhãn đánh dấu, hãy thử:

plt.xticks(rotation=90) 

Đối với các vị trí của huyền thoại vv, nó có lẽ là giá trị tham gia một cái nhìn tại các tight layout guide

+0

Điều này sẽ xoay các dấu ticklabels trên trục x, không phải là nhãn trục, vì vậy tôi tin rằng điều này không đạt được những gì OP muốn. – hooy

+0

Ahh tôi hiểu rồi. Dù bằng cách nào, từ khóa 'xoay vòng' là điểm chính - nó có thể được chuyển vào một chức năng nhãn. Đang cập nhật câu trả lời. – Dman2

+0

Đây là ảnh chụp màn hình cốt truyện của tôi. http://imageshack.us/photo/my-images/14/srzn.jpg/ – user2450971

4

Bạn nên sử dụng matplotlib API và gọi ax.set_xticklabels(res.index, rotation=0) như vậy:

index = Index(['loop1', 'loop2'], name='segment_name') 
data = [[100] * 3, [100] * 3] 
columns = ['sample1', 'sample2', 'sample3'] 
df = DataFrame(data, index=index, columns=columns) 

fig, ax = subplots() 
df.plot(ax=ax, kind='bar', legend=False) 
ax.set_xticklabels(df.index, rotation=0) 
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5)) 
fig.savefig('results.png', bbox_inches='tight') 

để có được những âm mưu kết quả:

enter image description here

Hoặc bạn có thể gọi fig.autofmt_xdate() cho một hiệu ứng nghiêng thoải mái, mà bạn có thể tất nhiên tinker với với trên (và tổng quát hơn) ax.set_xticklabels():

fig, ax = subplots() 
df.plot(ax=ax, kind='bar', legend=False) 
fig.autofmt_xdate() 
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5)) 
fig.savefig('results-tilted.png', bbox_inches='tight') 

enter image description here

+0

khi tôi thử và sử dụng ax = dataframe.plot() AND "ax.set_xticklabels (df.month_date, rotation = 90)" Tôi nhận được lỗi 'numpy.ndarray' đối tượng không có thuộc tính 'set_xticklabels'. Tôi chỉ muốn nhãn x trục của tôi xoay để văn bản đọc ngày, dọc từ trên xuống dưới! – yoshiserry

4

Để xoay vòng nhãn, bạn có thể chỉ cần báo gấu trúc xoay vòng cho bạn bằng cách cung cấp số độ cho rot đối số. Các huyền thoại bị cắt đứt được trả lời ở những nơi khác là tốt, như here:

df = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])], 
           orient='index', columns=['one', 'two', 'three']) 
ax = df.plot(kind='bar', rot=90) 
lgd = ax.legend(loc='center left', bbox_to_anchor=(1, 0.5)) 
fig.savefig("results.jpg", bbox_extra_artists=(lgd,), bbox_inches='tight') 
+1

Điều này chắc chắn là tốt nhất. 'rot' là thứ tôi đang tìm kiếm –

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