Tôi đã nhận được mã sau đây tạo ra hình sau
import numpy as np
np.random.seed(3)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame()
df['X'] = list(np.random.randint(100, size=100)) + list(np.random.randint(30, size=100))
df['Y'] = list(np.random.randint(100, size=100)) + list(np.random.randint(30, size=100))
df['Bin'] = df.apply(lambda row: .1 if row['X'] < 30 and row['Y'] < 30 else .9, axis=1)
fig, ax = plt.subplots(figsize=(10,10))
plt.scatter(df['X'], df['Y'])
Tôi đã vẽ đồ thị dữ liệu bằng cách sử dụng hexbins, như được lưu ý dưới đây
from matplotlib import cm
fig, ax = plt.subplots(figsize=(10,10))
hexbin = ax.hexbin(df['X'], df['Y'], C=df['Bin'], gridsize=20, cmap= cm.get_cmap('RdYlBu_r'),edgecolors='black')
plt.show()
Tôi muốn thay đổi kích thước của các hình lục giác dựa trên mật độ của các điểm được vẽ trong khu vực mà hình lục giác bao phủ. Ví dụ, các hình lục giác ở phía dưới bên trái (nơi các điểm nhỏ gọn) sẽ lớn hơn các hình lục giác ở mọi nơi khác (nơi các điểm thưa thớt). Có cách nào để làm việc này không?
Chỉnh sửa: Tôi đã thử giải pháp này , nhưng tôi không thể tìm ra cách tô màu các hình lục giác dựa trên df ['Bin'] hoặc cách đặt kích thước hex tối thiểu và tối đa.
from matplotlib.collections import PatchCollection
from matplotlib.path import Path
from matplotlib.patches import PathPatch
fig, ax = plt.subplots(figsize=(10,10))
hexbin = ax.hexbin(df['X'], df['Y'], C=df['Bins'], gridsize=20, cmap= cm.get_cmap('RdYlBu_r'),edgecolors='black')
def sized_hexbin(ax,hc):
offsets = hc.get_offsets()
orgpath = hc.get_paths()[0]
verts = orgpath.vertices
values = hc.get_array()
ma = values.max()
patches = []
for offset,val in zip(offsets,values):
v1 = verts*val/ma+offset
path = Path(v1, orgpath.codes)
patch = PathPatch(path)
patches.append(patch)
pc = PatchCollection(patches, cmap=cm.get_cmap('RdYlBu_r'), edgecolors='black')
pc.set_array(values)
ax.add_collection(pc)
hc.remove()
sized_hexbin(ax,hexbin)
plt.show()
1
Bạn có thấy stackoverflow.com/questions/48844600/ trên không?
—
plasmon360
@ plasmon360 Tôi đã cập nhật bài đăng với công việc của mình từ giải pháp được đề xuất
—
Ethan
Khi bạn sử dụng
—
ImportanceOfByingErnest
C=df['Bin'],
nó sẽ không hiển thị mật độ, mà là số lượng trong Bin
cột. Vì vậy, cốt truyện là chính xác. Bạn có thể bỏ qua C
đối số và lấy kích thước dựa trên mật độ.
@ImportanceOfByingErnest được rồi, gotcha. Làm cách nào tôi có thể tô màu các hình lục giác bằng df ['Bin']? Tôi cũng muốn có thể thay đổi kích thước tối thiểu của các hình lục giác để lớn hơn một chút, điều này có thể không?
—
Ethan
Kích thước được xác định bởi tỷ lệ
—
ImportanceOfByingErnest
val/ma
trong mã. Bạn có thể thay thế nó bằng bất cứ điều gì bạn thấy phù hợp. Các màu được thiết lập thông qua pc.set_array(values)
; bạn có thể sử dụng một cái gì đó khác hơn values
là tất nhiên.