matplotlib:使用边缘密度的阴谋显示一个2d数组(matplotlib: imshow a 2d array with plots of its marginal densities)
在2017年新增:请参阅 seaborn.jointplot和那里的优秀示例,同样适用于SO。 (问题出现在2013年,在seaborn之前。)
Added in 2017: see seaborn.jointplot and the good examples there, also this on SO. (The question was in 2013, before seaborn.)
在matplotlib中,如何绘制一个具有边缘密度的二维密度,沿着散点图 - 边缘 - 直方图 - 在ggplot2或带有直方图/边缘的二维图 ? 大致上,
# I have -- A = a 2d numpy array >= 0 xdens ~ A.mean(axis=0) ydens ~ A.mean(axis=1) # I want -- pl.imshow( A ) pl.plot( xdens ) narrow, below A pl.plot( ydens ) narrow, left of A, with the x y axes flipped在2017年新增:请参阅 seaborn.jointplot和那里的优秀示例,同样适用于SO。 (问题出现在2013年,在seaborn之前。)
How can one plot a 2d density with its marginal densities, along the lines of scatterplot-with-marginal-histograms-in-ggplot2 or 2D plot with histograms / marginals, in matplotlib ? In outline,
# I have -- A = a 2d numpy array >= 0 xdens ~ A.mean(axis=0) ydens ~ A.mean(axis=1) # I want -- pl.imshow( A ) pl.plot( xdens ) narrow, below A pl.plot( ydens ) narrow, left of A, with the x y axes flippedAdded in 2017: see seaborn.jointplot and the good examples there, also this on SO. (The question was in 2013, before seaborn.)
最满意答案
您可以使用sharex和sharey :
import numpy as np import matplotlib.pyplot as plt from matplotlib import gridspec t = np.linspace(0, 31.3, 100) f = np.linspace(0, 1000, 1000) a = np.exp(-np.abs(f-200)/200)[:, None] * np.random.rand(t.size) flim = (f.min(), f.max()) tlim = (t.min(), t.max()) gs = gridspec.GridSpec(2, 2, width_ratios=[1,3], height_ratios=[3,1]) ax = plt.subplot(gs[0,1]) axl = plt.subplot(gs[0,0], sharey=ax) axb = plt.subplot(gs[1,1], sharex=ax) ax.imshow(a, origin='lower', extent=tlim+flim, aspect='auto') plt.xlim(tlim) axl.plot(a.mean(1), f) axb.plot(t, a.mean(0))它给你:
You can use sharex and sharey with subplots:
import numpy as np import matplotlib.pyplot as plt from matplotlib import gridspec t = np.linspace(0, 31.3, 100) f = np.linspace(0, 1000, 1000) a = np.exp(-np.abs(f-200)/200)[:, None] * np.random.rand(t.size) flim = (f.min(), f.max()) tlim = (t.min(), t.max()) gs = gridspec.GridSpec(2, 2, width_ratios=[1,3], height_ratios=[3,1]) ax = plt.subplot(gs[0,1]) axl = plt.subplot(gs[0,0], sharey=ax) axb = plt.subplot(gs[1,1], sharex=ax) ax.imshow(a, origin='lower', extent=tlim+flim, aspect='auto') plt.xlim(tlim) axl.plot(a.mean(1), f) axb.plot(t, a.mean(0))Which gives you:
更多推荐
发布评论