Lập đồ thị dữ liệu phân loại với gấu trúc và matplotlib


94

Tôi có một khung dữ liệu với dữ liệu phân loại:

     colour  direction
1    red     up
2    blue    up
3    green   down
4    red     left
5    red     right
6    yellow  down
7    blue    down

Tôi muốn tạo một số biểu đồ, như biểu đồ hình tròn và biểu đồ dựa trên các danh mục. Có thể nào mà không tạo biến số giả không? Cái gì đó như

df.plot(kind='hist')

Câu trả lời:


181

Bạn chỉ có thể sử dụng value_countstrên loạt:

df['colour'].value_counts().plot(kind='bar')

nhập mô tả hình ảnh ở đây


1
Gợi ý df["colour"].value_counts().plot(kind='bar')thông thường thay thế
openwonk

2
Có thể xác định thứ tự của x nhãn?
P. Camilleri

3
Có, bạn có thể chỉ định thứ tự của các nhãn x một cách rõ ràng, ví dụdf['colour'].value_counts()[['green', 'yellow', 'blue', 'red']]
Alexander

Bạn có thể vui lòng cho tôi biết làm thế nào tôi có thể điều chỉnh cốt truyện này. Ý tôi là nếu tôi muốn thay đổi màu sắc cho mọi lớp hoặc tôi muốn thêm một chú giải vào nó.
Ibtihaj Tahir

24

Bạn có thể tìm thấy mosaicâm mưu hữu ích từ các mô hình thống kê. Điều này cũng có thể làm nổi bật thống kê cho các phương sai.

from statsmodels.graphics.mosaicplot import mosaic
plt.rcParams['font.size'] = 16.0
mosaic(df, ['direction', 'colour']);

nhập mô tả hình ảnh ở đây

Nhưng hãy cẩn thận với ô có kích thước 0 - chúng sẽ gây ra các vấn đề với nhãn.

Xem câu trả lời này để biết chi tiết


Cảm ơn. Tôi tiếp tục nhận được ValueError: Không thể chuyển đổi NA thành số nguyên trên đó.
Ivan

1
Đó là lý do tại sao tôi tham khảo câu trả lời này . Nó sẽ giúp giải quyết vấn đề này.
Primer

19

như thế này :

df.groupby('colour').size().plot(kind='bar')

11

Bạn cũng có thể sử dụng countplottừ seaborn. Gói này được xây dựng dựa trên pandasđể tạo ra một giao diện vẽ đồ thị cấp cao. Nó cung cấp cho bạn kiểu dáng đẹp và nhãn trục chính xác miễn phí.

import pandas as pd
import seaborn as sns
sns.set()

df = pd.DataFrame({'colour': ['red', 'blue', 'green', 'red', 'red', 'yellow', 'blue'],
                   'direction': ['up', 'up', 'down', 'left', 'right', 'down', 'down']})
sns.countplot(df['colour'], color='gray')

nhập mô tả hình ảnh ở đây

Nó cũng hỗ trợ tô màu các thanh đúng màu với một mẹo nhỏ

sns.countplot(df['colour'],
              palette={color: color for color in df['colour'].unique()})

nhập mô tả hình ảnh ở đây


10

Để vẽ nhiều đối tượng địa lý phân loại dưới dạng biểu đồ thanh trên cùng một biểu đồ, tôi sẽ đề xuất:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(
    {
        "colour": ["red", "blue", "green", "red", "red", "yellow", "blue"],
        "direction": ["up", "up", "down", "left", "right", "down", "down"],
    }
)

categorical_features = ["colour", "direction"]
fig, ax = plt.subplots(1, len(categorical_features))
for i, categorical_feature in enumerate(df[categorical_features]):
    df[categorical_feature].value_counts().plot("bar", ax=ax[i]).set_title(categorical_feature)
fig.show()

nhập mô tả hình ảnh ở đây


1
Đây là một hiệu ứng Stroop tuyệt vời!
Ciprian Tomoiagă
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.