私は次の図を生成する次のコードを持っています
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'])
以下のように、hexbinsを使用してデータをグラフ化しました
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 ['Bin']で色付けするにはどうすればよいですか?六角形の最小サイズを少し大きくしたいのですが、これは可能ですか?
—
イーサン
サイズは
—
ImportanceOfBeingErnest
val/ma
、コード内の比率によって決まります。あなたはそれをあなたが適切だと思うもので置き換えることができます。色はを介して設定されpc.set_array(values)
ます。values
もちろん、それ以外のものを使用できます。