আমি নিম্নলিখিত কোড পেয়েছি যা নিম্নলিখিত চিত্র উত্পাদন করে
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'])
আমি নীচে উল্লিখিত হিসাবে হেক্সবিন ব্যবহার করে ডেটা গ্রাফড করেছি
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()
আমি ষড়ভুজ যে অঞ্চলটি coversেকে দিয়েছিল সেগুলিতে প্লট করা পয়েন্টগুলির ঘনত্বের উপর ভিত্তি করে হেক্সাগনগুলির আকার পরিবর্তন করতে চাই। উদাহরণস্বরূপ, নীচে বামে হেক্সাগনগুলি (যেখানে পয়েন্টগুলি সংক্ষিপ্ত রয়েছে) অন্য কোথাও হেক্সাগনগুলির চেয়ে বড় হবে (যেখানে বিন্দুগুলি বিরল)। এই কাজ করতে একটি উপায় আছে কি?
সম্পাদনা: আমি এই সমাধানটি চেষ্টা করেছিলাম , তবে ডিএফ ['বিন'] এর উপর ভিত্তি করে কীভাবে হেক্সেসকে রঙিন করতে হবে, বা ন্যূনতম এবং সর্বাধিক হেক্স আকারটি কীভাবে সেট করবেন তা আমি বুঝতে পারি না।
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
আপনি কি স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / ৪৮৪৪৪66০০/২ দেখেছেন ?
—
plasmon360
@ plasmon360 আমি প্রস্তাবিত সমাধান থেকে আমার কাজের সাথে পোস্টটি আপডেট করেছি
—
ইথান
আপনি যখন
—
ImportanceOfBeing
C=df['Bin'],
এটি ব্যবহার করবেন তখন ঘনত্বটি প্রদর্শন করা হবে না, বরং Bin
কলামে পরিমাণ রয়েছে । সুতরাং প্লটটি সঠিক। আপনি C
যুক্তি ছেড়ে দিতে পারেন , এবং ঘনত্বের উপর ভিত্তি করে আকারগুলি পেতে পারেন ।
@ ইমপোর্টান্সঅফবিজিং আর্নেষ্ট ঠিক আছে, আছে। আমি কীভাবে ডিএফ ['বিন'] দ্বারা হেক্সেসকে রঙ করতে পারি? আমি আরও একটু বড় হতে হেক্সাগনগুলির ন্যূনতম আকার পরিবর্তন করতে সক্ষম হতে চাই, এটি কি সম্ভব?
—
ইথান
আকারটি
—
ImportanceOfBeingErnest
val/ma
কোডের অনুপাতে নির্ধারিত হয় । আপনি যা উপযুক্ত মনে করেন তা দিয়ে এটি প্রতিস্থাপন করতে পারেন। রঙের মাধ্যমে সেট করা হয় pc.set_array(values)
; আপনি values
অবশ্যই অন্য কিছু ব্যবহার করতে পারেন ।