मुझे निम्नलिखित कोड मिला है जो निम्नलिखित आंकड़ा बनाता है
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()
मैं उस षट्भुज को कवर करने वाले क्षेत्र में प्लॉट किए गए बिंदुओं के घनत्व के आधार पर हेक्सागोन के आकार को बदलना चाहता हूं। उदाहरण के लिए, नीचे के बायीं ओर के हेक्सागोन्स (जहाँ बिंदु कॉम्पैक्ट होते हैं) हर जगह हेक्सागोन्स से बड़े होंगे (जहाँ बिंदु विरल हैं)। क्या इसे करने का कोई तरीका है?
संपादित करें: मैंने इस समाधान की कोशिश की , लेकिन मैं यह पता नहीं लगा सका कि df ['Bin'] के आधार पर हेक्स को कैसे रंग दिया जाए, या न्यूनतम और अधिकतम हेक्स आकार कैसे सेट किया जाए।
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/… देखा ?
—
plasmon360
@ plasmon360 मैंने प्रस्तावित समाधान से अपने काम के साथ पोस्ट को अपडेट किया
—
एथन
जब आप इसका उपयोग करते हैं तो
—
ImportanceOfBeingErnest
C=df['Bin'],
यह घनत्व नहीं दिखाएगा, बल्कि इसकी मात्रा Bin
कॉलम में है। इसलिए कथानक सही है। आप C
तर्क को छोड़ सकते हैं , और घनत्व के आधार पर आकार प्राप्त कर सकते हैं।
@ImportanceOfBeingErnest ठीक है, गोथा। मैं df ['बिन'] द्वारा हेक्स को कैसे रंग सकता हूं? मैं हेक्सागोन्स के न्यूनतम आकार को थोड़ा बड़ा करने में सक्षम होना चाहूंगा, क्या यह संभव है?
—
इथन
आकार
—
ImportanceOfBeingErnest
val/ma
कोड में अनुपात से निर्धारित होता है । आप जो भी उपयुक्त लगे, उसे बदल सकते हैं। रंगों के माध्यम से सेट किया गया है pc.set_array(values)
; आप values
निश्चित रूप से कुछ और का उपयोग कर सकते हैं ।