Ho il seguente codice che produce la figura seguente
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'])
Ho rappresentato graficamente i dati usando hexbin, come indicato di seguito
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()
Vorrei cambiare la dimensione degli esagoni in base alla densità dei punti tracciati nell'area coperta da un esagono. Ad esempio, gli esagoni in basso a sinistra (dove i punti sono compatti) saranno più grandi degli esagoni ovunque (dove i punti sono radi). C'è un modo per fare questo?
Modifica: ho provato questa soluzione , ma non riesco a capire come colorare gli esagoni in base a df ['Bin'] o come impostare la dimensione esadecimale minima e massima.
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()
C=df['Bin'],non mostrerà la densità, ma piuttosto la quantità che si trova nella Bincolonna. Quindi la trama è corretta. Puoi tralasciare l' Cargomento e ottenere le dimensioni in base alla densità.
val/manel codice. Puoi sostituirlo con quello che ritieni opportuno. I colori sono impostati tramite pc.set_array(values); puoi usare qualcosa di diverso da quello valuesovviamente.





