通过matplotlib

时间:2018-10-11 05:30:01

标签: matplotlib normalization

以下代码在对定义范围之间的数据进行归一化后,生成一个六边形图。

from matplotlib.cm import viridis_r as glocmap
import numpy as np
import matplotlib.pyplot as plt

data = np.random.uniform(1.0, 10, size=(100,2))

ax1 plt.hexbin(data[:,0], data[:,1], bins=None,gridsize=(20,15), cmap=glocmap,
           vmin=0, vmax=100, alpha=0.75, mincnt=1.0)

cb = plt.colorbar(label='count')
cb.set_label('COUNT',size=20)
cb.ax.tick_params(labelsize=20) 
cb.set_alpha(1)

ax1.get_array()   #has length of 95
ax1._offsets       #2D array array of length 95

我想从数据中了解每个“坐标值”的“计数值”。轴实例有一个名为“ _offsets”的属性,该属性在绘制时与使用plt.hexbin生成的绘制相同,因此我认为这可能是坐标值,但这些值与“ data”中的值略有不同。 坐标表示x和y轴的值。

编辑:如注释中所建议,在轴实例上应用.get_array()可以得到长度(95)等于._offsets属性长度的数组。我的目标是从“数据”的对应点找到“计数”。例如数据[0]的“计数”值是什么?

hexbin plot from python code

1 个答案:

答案 0 :(得分:0)

PolyCollection的{​​{1}}方法将返回每个六边形的计数数。 .get_array()方法将返回每个六边形的中心。

.get_offsets()

将打印

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

data = np.random.uniform(1.0, 10, size=(50,2))

pc = plt.hexbin(data[:,0], data[:,1], bins=None,gridsize=(7,4), cmap="viridis_r",
                vmin=0, vmax=5, mincnt=1.0)

cb = plt.colorbar(label='count')
cb.set_label('COUNT',size=20)
cb.ax.tick_params(labelsize=20) 
cb.set_alpha(1)

counts = pc.get_array() 
positions = pc.get_offsets() 

print(counts[:10])
print(positions[:10])

for c, (x,y) in zip(counts[:10],positions[:10]):
    plt.text(x,y,"{:d}".format(int(c)), ha="center", va="center")

plt.show()

并显示

enter image description here

例如,第一个六边形以[1. 1. 1. 2. 2. 2. 1. 2. 1. 3.] [[1.04969905 1.41805371] [1.04969905 3.53403589] [1.04969905 7.76600025] [1.04969905 9.88198243] [2.28920799 5.65001807] [2.28920799 7.76600025] [2.28920799 9.88198243] [3.52871693 1.41805371] [3.52871693 3.53403589] [3.52871693 5.65001807]] 为中心,并且在其中有一个点(计数== 1)。第十个六边形的中心是x=1.04969905, y=1.41805371,其中有3个点(计数== 3)。