我正在尝试将数据集可视化,并且我很早就陷入了困境,因为我不理解matplotlib的逻辑。
数据保存在两个格式相同的2d表中:
>>> data1
array([[ 1. , 1.384 ],
[ 2. , 3.65218531],
[ 3. , 3.17718531],
[ 1. , 2.34513543],
[ 2. , 3.43223443],
[ 3. , 1.23333255],
...
>>> data2
...
我想在同一个图中可视化这些表格。 data1
表的行数比data2
多很多,所以我的想法是使用列式直方图显示data1
,使用这样的点显示data2
:
我知道如何制作数据的一维直方图,我知道如何制作散点图,但是如何获得彩色分区并将散点图叠加在正确的位置?
编辑: 示例代码:
import pylab
import numpy
import matplotlib.pyplot as plt
fig = plt.figure()
data1 = numpy.array([[1,1.5],[2,1.7],[3,1.8],[1,1.2],[2,1.8],[3,2.2]])
data2 = numpy.array([[1,2.1],[2,1.3],[3,1.4],[1,1.1],[2,1.9],[3,2.25]])
plt.scatter(data1[:,0], data1[:,1])
plt.scatter(data2[:,0], data2[:,1], color="red")
plt.show()
在实际代码中,data1
数组包含许多条目,使其变得混乱。因此希望获得'直方图'。
答案 0 :(得分:2)
我想你想做这样的事情:
w = .2
bins = np.linspace(-4, 4, 11, endpoint=True)
fig, ax = plt.subplots()
for j in range(1, 15):
tt = randn(50)
nn, _bins = np.histogram(tt, bins)
# don't use scatter unless you need to change the size or color of the markers
ax.plot(j*np.ones_like(tt), tt, 'r.')
ax.imshow(nn.reshape(-1, 1)[::-1], extent=[j-w, j+w, -4, 4], cmap='Blues', aspect='auto', interpolation='none')
ax.set_xlim([0, 15])
ax.set_ylim([-4, 4])
最好将每个bin绘制为Rectangle
。
您可能还想将vmax
和vmin
kwargs用于imshow
,以便颜色在列之间具有相同的含义。