Python - 用散点图堆叠两个直方图

标签 python numpy matplotlib plot

有散点图及其直方图的示例代码

x = np.random.rand(5000,1)
y = np.random.rand(5000,1)



fig = plt.figure(figsize=(7,7))
ax = fig.add_subplot(111)
ax.scatter(x, y, facecolors='none')
ax.set_xlim(0,1)
ax.set_ylim(0,1)



fig1 = plt.figure(figsize=(7,7))
ax1 = fig1.add_subplot(111)
ax1.hist(x, bins=25, fill = None, facecolor='none', 
        edgecolor='black', linewidth = 1)



fig2 = plt.figure(figsize=(7,7))
ax2 = fig2.add_subplot(111)
ax2.hist(y, bins=25 , fill = None, facecolor='none', 
        edgecolor='black', linewidth = 1)

我想要做的是创建这个图表,直方图附加到他们尊重的轴上,几乎就像这个例子一样

enter image description here

我熟悉 x 轴的堆叠和合并

f, (ax1, ax2, ax3) = plt.subplots(3)
ax1.scatter(x, y)
ax2.hist(x, bins=25, fill = None, facecolor='none', 
        edgecolor='black', linewidth = 1)
ax3.hist(y, bins=25 , fill = None, facecolor='none', 
        edgecolor='black', linewidth = 1)

f.subplots_adjust(hspace=0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)

enter image description here

但我不知道如何像我上面发布的图片那样将直方图附加到 y 轴和 x 轴,最重要的是,如何改变图表的大小(即使散点图更大和更小)直方图比较小)

最佳答案

Seaborn 是快速统计图表的好方法。但是如果你想避免另一个依赖你可以使用 subplot2grid放置子图和关键字 sharexsharey 以确保轴同步。

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(100)
y = np.random.randn(100)

scatter_axes = plt.subplot2grid((3, 3), (1, 0), rowspan=2, colspan=2)
x_hist_axes = plt.subplot2grid((3, 3), (0, 0), colspan=2,
                               sharex=scatter_axes)
y_hist_axes = plt.subplot2grid((3, 3), (1, 2), rowspan=2,
                               sharey=scatter_axes)

scatter_axes.plot(x, y, '.')
x_hist_axes.hist(x)
y_hist_axes.hist(y, orientation='horizontal')

plot

您应该始终查看 matplotlib gallery在询问如何绘制某些东西之前,它很可能会为您节省一些击键次数——我的意思是您不必问。画廊中实际上有两个这样的情节。不幸的是,代码很旧,没有利用 subplot2gridthe first one使用矩形和 second one使用 axes_grid,这是一个有点奇怪的野兽。这就是我发布此答案的原因。

关于Python - 用散点图堆叠两个直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39730184/

相关文章:

python - 为什么在软件包安装时有时会创建 .pth 文件?

Python,按特定顺序运行命令

python - 当数组名称为 unicode 时,numpy recfunctions append_fields 是否会失败?

python - 如何对齐networkx中的节点和边

python - 如何将图像上的对象轮廓绘制到单独的图像

python - 如何在Python中将不同的时间序列图合并成二维图

python - 更新进度条-MVP模式

python - 如何根据 Python 中的特定用户输入循环条件语句?

python - 创建多维数组的函数

python - 时间序列重采样