Aşağıdaki kodu üreten aşağıdaki kodu var
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'])
Verileri aşağıda belirtildiği gibi altıgenler kullanarak grafikledim
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()
Altıgenlerin boyutunu, altıgenin kapladığı alanda çizilen noktaların yoğunluğuna göre değiştirmek istiyorum. Örneğin, sol alt kısımdaki (noktaların kompakt olduğu) altıgenler, başka her yerde (noktaların seyrek olduğu) altıgenlerden daha büyük olacaktır. Bunu yapmanın bir yolu var mı?
Düzenleme: Ben bu çözümü denedim , ama nasıl df ['Bin'] dayalı hexes renklendirmek veya min ve max hex boyutu ayarlamak için nasıl anlayamıyorum.
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
Stackoverflow.com/questions/48844600/… 'i gördünüz mü ?
—
plasmon360
@ plasmon360 Önerilen çözümden çalışmalarımla gönderiyi güncelledim
—
Ethan
Kullandığınızda
—
ImportanceOfBeingErnest
C=df['Bin'],
yoğunluğu değil, Bin
sütundaki miktarı gösterecektir . Yani çizim doğru. C
Argümanı dışarıda bırakabilir ve yoğunluğa göre boyutları elde edebilirsiniz.
@ImportanceOfBeingErnest tamam, anladım. Hex'leri df ['Bin'] ile nasıl renklendirebilirim? Ayrıca altıgenlerin minik boyutunu biraz daha büyük olacak şekilde değiştirmek istiyorum, bu mümkün mü?
—
Ethan
Boyut,
—
ImportanceOfBeingErnest
val/ma
koddaki oranla belirlenir . Uygun bulduklarınızla değiştirebilirsiniz. Renkler pc.set_array(values)
; values
elbette başka bir şey kullanabilirsiniz .