[ad_1]
Đối với biểu đồ của tôi, tôi đang sử dụng Bộ dữ liệu lịch sử Olympic từ Olympedia.org mà Joseph Cheng đã chia sẻ trong Kaggle có giấy phép thuộc phạm vi công cộng.
Nó chứa kết quả Thế vận hội Olympic cấp độ vận động viên từ Athens 1896 đến Bắc Kinh 2022. Sau khi phân tích dữ liệu thăm dò (EDA), tôi đã chuyển đổi nó thành một tập dữ liệu chi tiết về số lượng vận động viên nữ trong mỗi môn thể thao/sự kiện mỗi năm. Ý tưởng biểu đồ bong bóng của tôi là hiển thị môn thể thao nào có tỷ lệ vận động viên nữ so với nam là 50/50 và tỷ lệ này đã phát triển như thế nào theo thời gian.
Dữ liệu vẽ biểu đồ của tôi bao gồm hai tập dữ liệu khác nhau, mỗi tập cho một năm: 2020 Và 1996. Đối với mỗi tập dữ liệu, tôi đã tính tổng số vận động viên tham gia vào mỗi sự kiện (tổng_số_vận_động_viên) và số tiền đó đại diện cho bao nhiêu so với tổng số vận động viên (nam + nữ) (sự khác biệt). Xem ảnh chụp màn hình dữ liệu bên dưới:
Đây là cách tiếp cận của tôi để hình dung nó:
- Tỷ lệ kích thước. Sử dụng bán kính của bong bóng để so sánh số lượng vận động viên cho mỗi môn thể thao. Các bong bóng lớn hơn sẽ đại diện cho các sự kiện có tính cạnh tranh cao, chẳng hạn như Điền kinh
- Diễn giải đa biến. Sử dụng màu sắc để thể hiện sự đại diện của phụ nữ. Các bong bóng màu xanh lá cây nhạt sẽ thể hiện các sự kiện có tỷ lệ chia đôi 50/50, chẳng hạn như Khúc côn cầu.
Đây là điểm khởi đầu của tôi (sử dụng mã và cách tiếp cận ở trên):
Một số cách khắc phục dễ dàng: tăng kích thước hình và đổi nhãn thành trống nếu kích thước không quá 250 để tránh có chữ bên ngoài bong bóng.
fig, ax = plt.subplots(figsize=(12,8),subplot_kw=dict(facet="equal"))#Labels edited immediately in dataset
Vâng, bây giờ ít nhất là nó có thể đọc được. Nhưng tại sao Thế vận hội hồng Và quyền anh màu xanh da trời? Hãy thêm một chú thích để minh họa mối quan hệ giữa màu sắc và hình ảnh phụ nữ.
Bởi vì nó không phải là biểu đồ thanh thông thường của bạn, plt.legend() không có tác dụng ở đây.
Sử dụng matplotlib Annotation Bbox, chúng ta có thể tạo hình chữ nhật (hoặc hình tròn) để hiển thị ý nghĩa đằng sau mỗi màu. Chúng ta cũng có thể làm điều tương tự để hiển thị thang đo bong bóng.
import matplotlib.pyplot as plt
from matplotlib.offsetbox import (AnnotationBbox, DrawingArea,
TextArea,HPacker)
from matplotlib.patches import Circle,Rectangle# That is an instance for one part of the legend
# Outline the place the annotation (legend) might be
xy = (50, 128)
# Create your coloured rectangle or circle
da = DrawingArea(20, 20, 0, 0)
p = Rectangle((10 ,10),10,10,shade="#fc8d62ff")
da.add_artist(p)
# Add textual content
textual content = TextArea("20%", textprops=dict(shade="#fc8d62ff", dimension=14,fontweight='daring'))
# Mix rectangle and textual content
vbox = HPacker(youngsters=(da, textual content), align="prime", pad=0, sep=3)
# Annotate each in a field (change alpha if you wish to see the field)
ab = AnnotationBbox(vbox, xy,
xybox=(1.005, xy(1)),
xycoords='information',
boxcoords=("axes fraction", "information"),
box_alignment=(0.2, 0.5),
bboxprops=dict(alpha=0)
)
#Add to your bubble chart
ax.add_artist(ab)
Tôi cũng đã thêm phụ đề và mô tả văn bản bên dưới biểu đồ chỉ bằng cách sử dụng plt. văn bản()
Giải thích biểu đồ một cách trực tiếp và dễ hiểu:
- Phần lớn các bong bóng có màu xanh lá cây nhạt → màu xanh lá cây có nghĩa là 50% là nữ → phần lớn các cuộc thi Olympic có sự phân chia đều giữa nam và nữ là 50/50 (thật tuyệt vời🙌)
- Chỉ có một môn thể thao (Bóng chày), có màu xanh lá cây đậm, không có sự tham gia của phụ nữ.
- 3 môn thể thao chỉ có nữ tham gia nhưng số lượng vận động viên khá thấp.
- Các môn thể thao lớn nhất về số lượng vận động viên (Bơi lội, Điền kinh và Thể dục dụng cụ) rất gần với tỷ lệ chia đều 50/50
[ad_2]
Source link